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:
parent
b8505bb611
commit
d1652ca7cd
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue