]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
support for _NET_WM_USER_TIME_WINDOW round 2 ! yay abstraction
[chaz/openbox] / openbox / client.c
index aac52e2dc338bcff8e7dd8096ba9b2f5c2f2182e..3f3f161de016c79126136d3eb84491f4d8a09a5a 100644 (file)
@@ -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);
     }
 }
This page took 0.022769 seconds and 4 git commands to generate.