Bugfix: Do not move focus if a container is moved across outputs
fixes #809 This makes the moving behavior more consistent. If you want to focus the workspace you are moving to, just chain the keybinding in your config file: bindsym $mod+Shift+1 move workspace 1; workspace 1
This commit is contained in:
committed by
Michael Stapelberg
parent
d36e2a70bf
commit
b565bfca13
26
src/con.c
26
src/con.c
@ -762,24 +762,18 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
|
||||
con_focus(old_focus);
|
||||
}
|
||||
|
||||
/* 8: when moving to a visible workspace on a different output, we keep the
|
||||
* con focused. Otherwise, we leave the focus on the current workspace as we
|
||||
* don’t want to focus invisible workspaces */
|
||||
if (source_output != dest_output &&
|
||||
workspace_is_visible(workspace) &&
|
||||
!con_is_internal(workspace)) {
|
||||
DLOG("Moved to a different output, focusing target\n");
|
||||
} else {
|
||||
/* Descend focus stack in case focus_next is a workspace which can
|
||||
* occur if we move to the same workspace. Also show current workspace
|
||||
* to ensure it is focused. */
|
||||
workspace_show(current_ws);
|
||||
/* 8: when moving to another workspace, we leave the focus on the current
|
||||
* workspace. (see also #809) */
|
||||
|
||||
/* Set focus only if con was on current workspace before moving.
|
||||
* Otherwise we would give focus to some window on different workspace. */
|
||||
if (source_ws == current_ws)
|
||||
/* Descend focus stack in case focus_next is a workspace which can
|
||||
* occur if we move to the same workspace. Also show current workspace
|
||||
* to ensure it is focused. */
|
||||
workspace_show(current_ws);
|
||||
|
||||
/* Set focus only if con was on current workspace before moving.
|
||||
* Otherwise we would give focus to some window on different workspace. */
|
||||
if (source_ws == current_ws)
|
||||
con_focus(con_descend_focused(focus_next));
|
||||
}
|
||||
|
||||
/* If anything within the container is associated with a startup sequence,
|
||||
* delete it so child windows won't be created on the old workspace. */
|
||||
|
Reference in New Issue
Block a user