]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly use workspace_show() when focus changes to a different output via...
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 25 Oct 2011 22:04:10 +0000 (23:04 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 25 Oct 2011 22:04:10 +0000 (23:04 +0100)
This makes i3bar show the correct workspace when you move your mouse from one
output to another.

src/handlers.c

index 29dcdc70936522b9c1e4fc003e8cbffb18d2afe9..aa3b418ed532c5266cae04a2ebf52d6e74c7d1d1 100644 (file)
@@ -222,6 +222,13 @@ static int handle_enter_notify(xcb_enter_notify_event_t *event) {
     if (config.disable_focus_follows_mouse)
         return 1;
 
+    /* Get the currently focused workspace to check if the focus change also
+     * involves changing workspaces. If so, we need to call workspace_show() to
+     * correctly update state and send the IPC event. */
+    Con *ws = con_get_workspace(con);
+    if (ws != con_get_workspace(focused))
+        workspace_show(ws);
+
     con_focus(con_descend_focused(con));
     tree_render();
 
@@ -958,6 +965,14 @@ static int handle_focus_in(xcb_focus_in_event_t *event) {
     }
 
     DLOG("focus is different, updating decorations\n");
+
+    /* Get the currently focused workspace to check if the focus change also
+     * involves changing workspaces. If so, we need to call workspace_show() to
+     * correctly update state and send the IPC event. */
+    Con *ws = con_get_workspace(con);
+    if (ws != con_get_workspace(focused))
+        workspace_show(ws);
+
     con_focus(con);
     /* We update focused_id because we don’t need to set focus again */
     focused_id = event->event;