]> git.sur5r.net Git - i3/i3/commitdiff
Only re-focus the workspace when moving a con if the target ws is hidden.
authorDeiz <silverwraithii@gmail.com>
Mon, 1 Oct 2012 02:44:19 +0000 (22:44 -0400)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 2 Oct 2012 22:03:24 +0000 (00:03 +0200)
src/con.c

index 5bba8c7c0a779f73ec9ca364a47ca7db1587e92c..77608489d8b33dada9e9ac94852f7783f669fefe 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -714,12 +714,15 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
      * we don’t focus when there is a fullscreen con on that workspace. */
     if (!con_is_internal(workspace) &&
         con_get_fullscreen_con(workspace, CF_OUTPUT) == NULL) {
-        /* We need to save focus on workspace level and restore it afterwards.
-         * Otherwise, we might focus a different workspace without actually
-         * switching workspaces. */
+        /* We need to save the focused workspace on the output in case the
+         * new workspace is hidden and it's necessary to immediately switch
+         * back to the originally-focused workspace. */
         Con *old_focus = TAILQ_FIRST(&(output_get_content(dest_output)->focus_head));
         con_focus(con_descend_focused(con));
-        con_focus(old_focus);
+
+        /* Restore focus if the output's focused workspace has changed. */
+        if (con_get_workspace(focused) != old_focus)
+            con_focus(old_focus);
     }
 
     /* 8: when moving to a visible workspace on a different output, we keep the