X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fwindow.c;h=ad61294d3ef734343904cdaab162e19a95c9673f;hb=55b84316bb699fa530efe78d75ae8e1d57c1b57f;hp=b90dc5093836c68db66136ad10e46be2c7da176d;hpb=22a88cfe99d897dc7d3be7b53b954f6cdfa250c6;p=chaz%2Fopenbox diff --git a/openbox/window.c b/openbox/window.c index b90dc509..ad61294d 100644 --- a/openbox/window.c +++ b/openbox/window.c @@ -26,6 +26,7 @@ #include "prompt.h" #include "debug.h" #include "grab.h" +#include "obt/xqueue.h" static GHashTable *window_map; @@ -146,9 +147,15 @@ void window_manage_all(void) if (children) XFree(children); } +static gboolean check_unmap(XEvent *e, gpointer data) +{ + const Window win = *(Window*)data; + return ((e->type == DestroyNotify && e->xdestroywindow.window == win) || + (e->type == UnmapNotify && e->xunmap.window == win)); +} + void window_manage(Window win) { - XEvent e; XWindowAttributes attrib; gboolean no_manage = FALSE; gboolean is_dockapp = FALSE; @@ -158,15 +165,11 @@ void window_manage(Window win) /* check if it has already been unmapped by the time we started mapping. the grab does a sync so we don't have to here */ - if (XCheckTypedWindowEvent(obt_display, win, DestroyNotify, &e) || - XCheckTypedWindowEvent(obt_display, win, UnmapNotify, &e)) - { - XPutBackEvent(obt_display, &e); - ob_debug("Trying to manage unmapped window. Aborting that.\n"); + if (xqueue_exists_local(check_unmap, &win)) { + ob_debug("Trying to manage unmapped window. Aborting that."); no_manage = TRUE; } - - if (!XGetWindowAttributes(obt_display, win, &attrib)) + else if (!XGetWindowAttributes(obt_display, win, &attrib)) no_manage = TRUE; else { XWMHints *wmhints; @@ -187,7 +190,7 @@ void window_manage(Window win) if (!no_manage) { if (attrib.override_redirect) { - ob_debug("not managing override redirect window 0x%x\n", win); + ob_debug("not managing override redirect window 0x%x", win); grab_server(FALSE); } else if (is_dockapp) { @@ -200,7 +203,7 @@ void window_manage(Window win) } else { grab_server(FALSE); - ob_debug("FAILED to manage window 0x%x\n", win); + ob_debug("FAILED to manage window 0x%x", win); } }