X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=3f3f161de016c79126136d3eb84491f4d8a09a5a;hb=f54bd60a004a17583cc3e1783a29c4518686dceb;hp=aac52e2dc338bcff8e7dd8096ba9b2f5c2f2182e;hpb=cdb108c76d20e8272bfbd15919e32e609d685322;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index aac52e2d..3f3f161d 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -32,6 +32,7 @@ #include "event.h" #include "grab.h" #include "focus.h" +#include "propwin.h" #include "stacking.h" #include "openbox.h" #include "group.h" @@ -62,7 +63,6 @@ typedef struct } ClientCallback; GList *client_list = NULL; -GHashTable *client_user_time_window_map; static GSList *client_destructors = NULL; @@ -95,23 +95,16 @@ static GSList *client_search_all_top_parents_internal(ObClient *self, 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) @@ -512,10 +505,6 @@ void client_unmanage(ObClient *self) /* 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 */ @@ -529,6 +518,9 @@ void client_unmanage(ObClient *self) /* 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)) { @@ -2058,17 +2050,14 @@ void client_update_user_time(ObClient *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 " @@ -2080,20 +2069,12 @@ void client_update_user_time_window(ObClient *self) "_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); } }