]> Dogcows Code - chaz/openbox/commitdiff
more focus cleanups. ignored focusin's were not working right recursively.
authorDana Jansens <danakj@orodu.net>
Fri, 28 Mar 2003 09:57:48 +0000 (09:57 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 28 Mar 2003 09:57:48 +0000 (09:57 +0000)
also, when the focusin coming later is not for a valid window the fallback would not be called. both fixed.

openbox/event.c

index 13586f706bc34d1da510f3e3f9030efb541fc77e..8445a7f08e7723dfc0f9efcb0083454933f205aa 100644 (file)
@@ -243,12 +243,12 @@ void event_process(XEvent *e)
             if (XCheckTypedEvent(ob_display, FocusIn, &fi)) {
                event_process(&fi);
 
-                if (fi.xfocus.window == e->xfocus.window)
-                    return;
                 /* secret magic way of event_process telling us that no client
                    was found for the FocusIn event */
-                if (fi.xfocus.window == None)
+                if (fi.xfocus.window != None)
                     focus_fallback(FALSE);
+                if (fi.xfocus.window == e->xfocus.window)
+                    return;
             } else
                 focus_fallback(FALSE);
         }
@@ -274,8 +274,6 @@ void event_process(XEvent *e)
        event_handle_root(e);
     else if (e->type == MapRequest)
        client_manage(window);
-    else if (e->type == FocusIn)
-       e->xfocus.window = None; /* says no client was found for the event */
     else if (e->type == ConfigureRequest) {
        /* unhandled configure requests must be used to configure the
           window directly */
@@ -347,6 +345,8 @@ static void event_handle_client(Client *client, XEvent *e)
         /* focus state can affect the stacking layer */
         client_calc_layer(client);
         engine_frame_adjust_focus(client->frame);
+
+       e->xfocus.window = None; /* says a client was found for the event! */
        break;
     case EnterNotify:
         if (client_normal(client)) {
This page took 0.025795 seconds and 4 git commands to generate.