summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-03-24 23:19:45 +0000
committerDana Jansens <danakj@orodu.net>2007-03-24 23:19:45 +0000
commiteb2a0feb0154e86a1c6c117fd0f6d1a18959b694 (patch)
tree341cf6129fe724edad9466a18310713489a3c74a
parent4aa8d64f76b48f8c43eb39eeca1f61fcc8c7b61e (diff)
watch for reverttoparent reverting to the root window, which will create a DetailInferior focusin event on root.
adding some debug messages also which I am using..
-rw-r--r--openbox/client.c5
-rw-r--r--openbox/event.c12
-rw-r--r--openbox/frame.c28
-rw-r--r--openbox/frame.h1
4 files changed, 24 insertions, 22 deletions
diff --git a/openbox/client.c b/openbox/client.c
index f1be6fa4..a51ecfd7 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -220,13 +220,14 @@ void client_manage(Window window)
grab_server(TRUE);
- /* check if it has already been unmapped by the time we started mapping
+ /* 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(ob_display, window, DestroyNotify, &e) ||
XCheckTypedWindowEvent(ob_display, window, UnmapNotify, &e))
{
XPutBackEvent(ob_display, &e);
+ ob_debug("Trying to manage unmapped window. Aborting that.\n");
grab_server(FALSE);
return; /* don't manage it */
}
@@ -393,6 +394,8 @@ void client_manage(Window window)
won't be all wacko!!
also, this moves the window to the position where it has been placed
*/
+ ob_debug("placing window 0x%x at %d, %d with size %d x %d\n",
+ self->window, newx, newy, self->area.width, self->area.height);
client_apply_startup_state(self, newx, newy);
keyboard_grab_for_client(self, TRUE);
diff --git a/openbox/event.c b/openbox/event.c
index b5703782..7e66cc28 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -329,7 +329,8 @@ static gboolean wanted_focusevent(XEvent *e)
if (win == RootWindow(ob_display, ob_screen)) {
/* This means focus reverted off of a client */
- if (detail == NotifyPointerRoot || detail == NotifyDetailNone)
+ if (detail == NotifyPointerRoot || detail == NotifyDetailNone ||
+ detail == NotifyInferior)
return TRUE;
else
return FALSE;
@@ -688,7 +689,8 @@ static void event_handle_client(ObClient *client, XEvent *e)
} else if (ce.xfocus.detail == NotifyInferior) {
ob_debug("Focus went to parent\n");
/* Focus has been reverted to parent, which is our frame window,
- so fall back to something other than the window which had it. */
+ or the root window, so fall back to something other than the
+ window which had it. */
focus_fallback(FALSE);
} else {
/* Focus did move, so process the FocusIn event */
@@ -906,7 +908,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
}
break;
case UnmapNotify:
- ob_debug("UnmapNotify for window 0x%x\n", client->window);
+ ob_debug("UnmapNotify for window 0x%x eventwin 0x%x sendevent %d "
+ "ignores left %d\n",
+ client->window, e->xunmap.event, e->xunmap.from_configure,
+ client->ignore_unmaps);
if (client->ignore_unmaps) {
client->ignore_unmaps--;
break;
@@ -932,6 +937,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
X server to deal with after we unmanage the window */
XPutBackEvent(ob_display, e);
+ ob_debug("ReparentNotify for window 0x%x\n", client->window);
client_unmanage(client);
break;
case MapRequest:
diff --git a/openbox/frame.c b/openbox/frame.c
index 5383f7a3..880ab1b5 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -234,32 +234,26 @@ static void frame_free(ObFrame *self)
void frame_show(ObFrame *self)
{
+ ob_debug("frame_show for window 0x%x : %d\n", self->client->window,
+ self->visible);
if (!self->visible) {
self->visible = TRUE;
XMapWindow(ob_display, self->client->window);
XMapWindow(ob_display, self->window);
- self->firstmap = TRUE;
}
}
void frame_hide(ObFrame *self)
{
- if (self->visible || self->firstmap == FALSE) {
- if (self->visible) {
- self->visible = FALSE;
- self->client->ignore_unmaps += 1;
- /* we unmap the client itself so that we can get MapRequest
- events, and because the ICCCM tells us to! */
- XUnmapWindow(ob_display, self->window);
- XUnmapWindow(ob_display, self->client->window);
- } else {
- /* the frame wasn't visible, but the frame is being hidden now.
- so we don't need to unmap the frame, but we do need to unmap
- the client. */
- self->client->ignore_unmaps += 1;
- XUnmapWindow(ob_display, self->client->window);
- }
- self->firstmap = TRUE;
+ ob_debug("frame_hide for window 0x%x : %d\n", self->client->window,
+ self->visible);
+ if (self->visible) {
+ self->visible = FALSE;
+ self->client->ignore_unmaps += 1;
+ /* we unmap the client itself so that we can get MapRequest
+ events, and because the ICCCM tells us to! */
+ XUnmapWindow(ob_display, self->window);
+ XUnmapWindow(ob_display, self->client->window);
}
}
diff --git a/openbox/frame.h b/openbox/frame.h
index 70855b1b..0d044366 100644
--- a/openbox/frame.h
+++ b/openbox/frame.h
@@ -76,7 +76,6 @@ struct _ObFrame
Strut size;
Rect area;
gboolean visible;
- gboolean firstmap;
/*! Whether the window is obscured at all or fully visible. */
gboolean obscured;