]> Dogcows Code - chaz/openbox/commitdiff
no more losing focus from wm_torture -t map_response
authorDana Jansens <danakj@orodu.net>
Sun, 13 May 2007 16:39:04 +0000 (16:39 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 13 May 2007 16:39:04 +0000 (16:39 +0000)
when a focusin comes for an invalid target, set that focus has wandered off, so
that when the focusout comes in afterwards we can react accordingly

openbox/event.c

index 9d8c5f3c9af80e0f9ee84a48d320b32f3877828d..9e72408db951a40cc9f381b4541ce0c49036e620 100644 (file)
@@ -356,8 +356,13 @@ static Bool event_look_for_focusin(Display *d, XEvent *e, XPointer arg)
 
 Bool event_look_for_focusin_client(Display *d, XEvent *e, XPointer arg)
 {
+    ObWindow *w;
+
+    /* It is possible to get FocusIn events or unmanaged windows, meaning
+       they won't be for any known client */
     return e->type == FocusIn && wanted_focusevent(e, TRUE) &&
-        e->xfocus.window != screen_support_win;
+        (w = g_hash_table_lookup(window_map, &e->xfocus.window)) &&
+        WINDOW_IS_CLIENT(w);
 }
 
 static void print_focusevent(XEvent *e)
@@ -508,7 +513,19 @@ static void event_process(const XEvent *ec, gpointer data)
                 if (!focus_left_screen)
                     focus_fallback(TRUE);
             }
-        } else if (client && client != focus_client) {
+        }
+        else if (!client) {
+            /* It is possible to get FocusIn events or unmanaged windows,
+               meaning they won't be for any known client
+
+               If this happens, set the client to NULL so we know focus
+               has wandered off, and we'll get a focus out for it
+               shortly.
+            */
+            ob_debug_type(OB_DEBUG_FOCUS, "Focus went to an invalid target\n");
+            focus_set_client(NULL);
+        }
+        else if (client != focus_client) {
             focus_left_screen = FALSE;
             frame_adjust_focus(client->frame, TRUE);
             focus_set_client(client);
This page took 0.026784 seconds and 4 git commands to generate.