summaryrefslogtreecommitdiff
path: root/openbox/client.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-09 17:58:58 +0000
committerDana Jansens <danakj@orodu.net>2007-05-09 17:58:58 +0000
commit851555348ec39a01a0e150d2e12b71212b8d338b (patch)
treebc118f364e184388b46d8efd53bbdf9d38c051bd /openbox/client.c
parentcdb108c76d20e8272bfbd15919e32e609d685322 (diff)
support for _NET_WM_USER_TIME_WINDOW round 2 ! yay abstraction
Diffstat (limited to 'openbox/client.c')
-rw-r--r--openbox/client.c39
1 files changed, 10 insertions, 29 deletions
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);
}
}