]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly restore the focus to the root screen after unmapping the last clien...
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 7 Oct 2009 18:26:13 +0000 (20:26 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 7 Oct 2009 18:27:20 +0000 (20:27 +0200)
Sometimes, it may happen that the focus is "nowhere" and thus the
user is stuck. This was often the case with opera, sometimes with
pcmanfm. See ticket #118.

src/handlers.c

index 601d46f0bf5aadf6d5d40cd8dea72d7416387c4a..354d0fa6107f033296bf1f520f1001e2fc6c3a02 100644 (file)
@@ -721,9 +721,19 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
 
         render_layout(conn);
 
-        /* Ensure the focus is set to the next client in the focus stack */
-        if (workspace_active && to_focus != NULL)
-                set_focus(conn, to_focus, true);
+        /* Ensure the focus is set to the next client in the focus stack or to
+         * the screen itself (if we do not focus the screen, it can happen that
+         * the focus is "nowhere" and thus keypress events will not be received
+         * by i3, thus the user cannot use any hotkeys). */
+        if (workspace_active) {
+                if (to_focus != NULL)
+                        set_focus(conn, to_focus, true);
+                else {
+                        LOG("Restoring focus to root screen\n");
+                        xcb_set_input_focus(conn, XCB_INPUT_FOCUS_POINTER_ROOT, root, XCB_CURRENT_TIME);
+                        xcb_flush(conn);
+                }
+        }
 
         return 1;
 }