]> git.sur5r.net Git - i3/i3/commitdiff
cmd_rename_workspace: always call con_focus 3327/head
authorOrestis Floros <orestisf1993@gmail.com>
Wed, 11 Jul 2018 21:12:27 +0000 (00:12 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Thu, 12 Jul 2018 00:42:38 +0000 (03:42 +0300)
This was introduced in 252db3b8c (#3245). That commit moved the
con_activate line inside the loop, meaning it wouldn't always be called.

When the mouse moved after a rename with focus_follows_mouse enabled,
check_crossing_screen_boundary (src/handlers.c:111) called
con_descend_focused that used the wrong focus order.

I also change con_activate to con_focus since we don't really want to
raise floating containers there.

Fixes #3325

src/commands.c

index c7b57ab3571a94f89b5ebec0b39b2d23a3f9174d..fb7b08bf579e6a7da4d04eae74ab0af4f15736f1 100644 (file)
@@ -2021,26 +2021,25 @@ void cmd_rename_workspace(I3_CMD, const char *old_name, const char *new_name) {
         }
         workspace_move_to_output(workspace, target_output);
 
-        bool can_restore_focus = previously_focused != NULL;
-        /* NB: If previously_focused is a workspace we can't
-         * work directly with it since it might have been cleaned up by
-         * workspace_show() already, depending on the
-         * focus order/number of other workspaces on the output.
-         * Instead, we loop through the available workspaces and only focus
-         * previously_focused if we still find it. */
-        if (previously_focused_content) {
-            Con *workspace = NULL;
-            GREP_FIRST(workspace, previously_focused_content, child == previously_focused);
-            can_restore_focus &= (workspace != NULL);
-        }
+        break;
+    }
 
-        if (can_restore_focus) {
-            /* Restore the previous focus since con_attach messes with the focus. */
-            workspace_show(con_get_workspace(previously_focused));
-            con_activate(previously_focused);
-        }
+    bool can_restore_focus = previously_focused != NULL;
+    /* NB: If previously_focused is a workspace we can't work directly with it
+     * since it might have been cleaned up by workspace_show() already,
+     * depending on the focus order/number of other workspaces on the output.
+     * Instead, we loop through the available workspaces and only focus
+     * previously_focused if we still find it. */
+    if (previously_focused_content) {
+        Con *workspace = NULL;
+        GREP_FIRST(workspace, previously_focused_content, child == previously_focused);
+        can_restore_focus &= (workspace != NULL);
+    }
 
-        break;
+    if (can_restore_focus) {
+        /* Restore the previous focus since con_attach messes with the focus. */
+        workspace_show(con_get_workspace(previously_focused));
+        con_focus(previously_focused);
     }
 
     cmd_output->needs_tree_render = true;