+ /*ob_debug("window %s user time %u\n", self->title, time);*/
+ }
+}
+
+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;
+ }
+
+ if (self->group && self->group->leader == w) {
+ ob_debug_type(OB_DEBUG_APP_BUGS, "Window is setting its "
+ "_NET_WM_USER_TYPE_WINDOW to its group leader\n");
+ /* do it anyways..? */
+ }
+ else if (w == self->window) {
+ 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 */
+ }
+
+ 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);
+ }
+
+ client_update_user_time(self);