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
This commit is contained in:
Orestis Floros 2018-07-12 00:12:27 +03:00
parent b8505bb611
commit d1652ca7cd
No known key found for this signature in database
GPG Key ID: E9AD9F32E401E38F
1 changed files with 18 additions and 19 deletions

View File

@ -2021,28 +2021,27 @@ void cmd_rename_workspace(I3_CMD, const char *old_name, const char *new_name) {
} }
workspace_move_to_output(workspace, target_output); 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);
}
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);
}
break; break;
} }
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);
}
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; cmd_output->needs_tree_render = true;
ysuccess(true); ysuccess(true);