#include "event.h"
#include "grab.h"
#include "focus.h"
+#include "propwin.h"
#include "stacking.h"
#include "openbox.h"
#include "group.h"
} ClientCallback;
GList *client_list = NULL;
-GHashTable *client_user_time_window_map;
static GSList *client_destructors = NULL;
gboolean bylayer,
ObStackingLayer layer);
-static guint window_hash(Window *w) { return *w; }
-static gboolean window_comp(Window *w1, Window *w2) { return *w1 == *w2; }
-
void client_startup(gboolean reconfig)
{
if (reconfig) return;
- client_user_time_window_map = g_hash_table_new((GHashFunc)window_hash,
- (GEqualFunc)window_comp);
client_set_list();
}
void client_shutdown(gboolean reconfig)
{
if (reconfig) return;
-
- g_hash_table_destroy(client_user_time_window_map);
}
void client_add_destructor(ObClientCallback func, gpointer data)
/* we dont want events no more. do this before hiding the frame so we
don't generate more events */
XSelectInput(ob_display, self->window, NoEventMask);
- if (self->user_time_window) {
- XSelectInput(ob_display, self->user_time_window, NoEventMask);
- g_hash_table_remove(client_user_time_window_map, &w);
- }
frame_hide(self->frame);
/* flush to send the hide to the server quickly */
/* remove the window from our save set */
XChangeSaveSet(ob_display, self->window, SetModeDelete);
+ /* kill the property windows */
+ propwin_remove(self->user_time_window, OB_PROPWIN_USER_TIME, self);
+
/* update the focus lists */
focus_order_remove(self);
if (client_focused(self)) {
void client_update_user_time_window(ObClient *self)
{
guint32 w;
- ObClient *c;
if (!PROP_GET32(self->window, net_wm_user_time_window, window, &w))
w = None;
if (w != self->user_time_window) {
- if (self->user_time_window) {
- XSelectInput(ob_display, self->user_time_window, NoEventMask);
- g_hash_table_remove(client_user_time_window_map, &w);
- self->user_time_window = None;
- }
+ /* remove the old window */
+ propwin_remove(self->user_time_window, OB_PROPWIN_USER_TIME, self);
+ self->user_time_window = None;
if (self->group && self->group->leader == w) {
ob_debug_type(OB_DEBUG_APP_BUGS, "Window is setting its "
"_NET_WM_USER_TIME_WINDOW to itself\n");
w = None; /* don't do it */
}
- else if (((c = g_hash_table_lookup(client_user_time_window_map,&w)))) {
- ob_debug_type(OB_DEBUG_APP_BUGS, "Client %s is trying to use "
- "the _NET_WM_USER_TIME_WINDOW of %s\n",
- self->title, c->title);
- w = None; /* don't do it */
- }
+ /* add the new window */
+ propwin_add(w, OB_PROPWIN_USER_TIME, self);
self->user_time_window = w;
- if (self->user_time_window != None) {
- XSelectInput(ob_display,self->user_time_window,PropertyChangeMask);
- g_hash_table_insert(client_user_time_window_map,
- &self->user_time_window, self);
- }
+ /* and update from it */
client_update_user_time(self);
}
}