]> Dogcows Code - chaz/openbox/commitdiff
yet more improvements to focus handling
authorDana Jansens <danakj@orodu.net>
Sun, 23 Mar 2003 23:47:47 +0000 (23:47 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 23 Mar 2003 23:47:47 +0000 (23:47 +0000)
openbox/client.c
openbox/client.h
openbox/event.c

index af1e3ba8b6d1a1b39611e3c1e66f49ae538c0d1b..8d1cc03449d3df97b9461ff4f729b2ed4229648d 100644 (file)
@@ -1923,8 +1923,6 @@ gboolean client_focus(Client *self)
        XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
     }
 
-    client_set_focused(self, TRUE);
-
     /* XSync(ob_display, FALSE); XXX Why sync? */
     return TRUE;
 }
@@ -1932,30 +1930,6 @@ gboolean client_focus(Client *self)
 void client_unfocus(Client *self)
 {
     g_assert(focus_client == self);
-    client_set_focused(self, FALSE);
-}
-
-void client_set_focused(Client *self, gboolean focused)
-{
-    if (focused) {
-        if (focus_client != self) {
-            focus_set_client(self);
-
-            /* focus state can affect the stacking layer */
-            client_calc_layer(self);
-
-            engine_frame_adjust_focus(self->frame);
-        }
-    } else {
-       if (focus_client == self)
-           focus_set_client(NULL);
-
-        /* focus state can affect the stacking layer */
-        client_calc_layer(self);
-
-        if (self->frame != NULL) /* unfocus can happen while being unmanaged */
-            engine_frame_adjust_focus(self->frame);
-    }
 }
 
 gboolean client_focused(Client *self)
index 808f4e5f8a6f2aee151483bce96400d0ba2370a7..e51315c0ef495280c38ef6ea09bcb9f75595c008 100644 (file)
@@ -320,11 +320,6 @@ gboolean client_normal(Client *self);
 /* Returns if the window is focused */
 gboolean client_focused(Client *self);
 
-/*! Sets the client to a focused or unfocused state. This does not actually
-  change the input focus, but rather is used once focus has been moved to tell
-  the client that it is so. */
-void client_set_focused(Client *self, gboolean focused);
-
 /*! Move and/or resize the window.
   This also maintains things like the client's minsize, and size increments.
   @param anchor The corner to keep in the same position when resizing.
index a5bce992ac0200fa7389a927e9864820dff972bd..d3426109626e43bbdf0fc3963e6a5bb12c9c51d4 100644 (file)
@@ -238,7 +238,11 @@ void event_process(XEvent *e)
                if (fi.xfocus.window == e->xfocus.window)
                    return;
            }
-       }
+       } else if (window == focus_backup && focus_client != NULL)
+            /* Something's focused but we got a focus event for the backup
+               window. this means that something unfocused before we received
+               the new FocusIn. Just ignore it. */
+               return;
        break;
     case EnterNotify:
     case LeaveNotify:
@@ -323,10 +327,22 @@ static void event_handle_client(Client *client, XEvent *e)
      
     switch (e->type) {
     case FocusIn:
-        client_set_focused(client, TRUE);
+        if (focus_client != client)
+            focus_set_client(client);
+
+        /* focus state can affect the stacking layer */
+        client_calc_layer(client);
+
+        engine_frame_adjust_focus(client->frame);
        break;
     case FocusOut:
-        client_set_focused(client, FALSE);
+       if (focus_client == client)
+           focus_set_client(NULL);
+
+        /* focus state can affect the stacking layer */
+        client_calc_layer(client);
+
+        engine_frame_adjust_focus(client->frame);
        break;
     case ConfigureRequest:
        g_message("ConfigureRequest for window %lx", client->window);
This page took 0.027122 seconds and 4 git commands to generate.