From: Orestis Floros Date: Wed, 11 Jul 2018 21:12:27 +0000 (+0300) Subject: cmd_rename_workspace: always call con_focus X-Git-Tag: 4.16~69^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=refs%2Fpull%2F3327%2Fhead;p=i3%2Fi3 cmd_rename_workspace: always call con_focus 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 --- diff --git a/src/commands.c b/src/commands.c index c7b57ab3..fb7b08bf 100644 --- a/src/commands.c +++ b/src/commands.c @@ -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;