]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly set currently_focused when clients are destroyed
authorMichael Stapelberg <michael+x200@stapelberg.de>
Thu, 5 Mar 2009 16:08:57 +0000 (17:08 +0100)
committerMichael Stapelberg <michael+x200@stapelberg.de>
Thu, 5 Mar 2009 16:08:57 +0000 (17:08 +0100)
src/handlers.c

index 36f4378becdbab4e55328e27c6570ec3ba37791b..f7ddc5870cf8884ca44ae9657a60025cffa95024 100644 (file)
@@ -446,8 +446,16 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
                 printf("Removing from focus stack\n");
                 SLIST_REMOVE(&(con->workspace->focus_stack), client, Client, focus_clients);
 
-                /* Remove from currently_focused */
+                /* Set currently_focused to the next client which will get focus in this
+                   particular container. This does not necessarily correspond with the client
+                   that will be focused next */
                 con->currently_focused = NULL;
+                Client *focus_client;
+                SLIST_FOREACH(focus_client, &(con->workspace->focus_stack), focus_clients)
+                        if (focus_client->container == con) {
+                                con->currently_focused = focus_client;
+                                break;
+                        }
 
                 /* Actually set focus, if there is a window which should get it */
                 if (!SLIST_EMPTY(&(con->workspace->focus_stack)))