Bugfix: Don’t lose focus on fullscreen windows when another window gets moved to that workspace (+test) (Thanks rami)

Fixes: #606
This commit is contained in:
Michael Stapelberg 2012-01-07 18:18:36 +00:00
parent 71d261fd77
commit f78caf8c58
2 changed files with 30 additions and 2 deletions

View File

@ -656,7 +656,9 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
con_fix_percent(next); con_fix_percent(next);
/* 7: focus the con on the target workspace (the X focus is only updated by /* 7: focus the con on the target workspace (the X focus is only updated by
* calling tree_render(), so for the "real" focus this is a no-op). */ * calling tree_render(), so for the "real" focus this is a no-op).
* We dont focus when there is a fullscreen con on that workspace. */
if (con_get_fullscreen_con(workspace, CF_OUTPUT) == NULL)
con_focus(con_descend_focused(con)); con_focus(con_descend_focused(con));
/* 8: when moving to a visible workspace on a different output, we keep the /* 8: when moving to a visible workspace on a different output, we keep the

View File

@ -68,4 +68,30 @@ sync_with_i3($x);
is($x->input_focus, $third->id, 'third window focused'); is($x->input_focus, $third->id, 'third window focused');
################################################################################
# Ensure that moving a window to a workspace which has a fullscreen window does
# not focus it (otherwise the user cannot get out of fullscreen mode anymore).
################################################################################
$tmp = fresh_workspace;
my $fullscreen_window = open_window;
cmd 'fullscreen';
my $nodes = get_ws_content($tmp);
is(scalar @$nodes, 1, 'precisely one window');
is($nodes->[0]->{focused}, 1, 'fullscreen window focused');
my $old_id = $nodes->[0]->{id};
$tmp2 = fresh_workspace;
my $move_window = open_window;
cmd "move workspace $tmp";
cmd "workspace $tmp";
$nodes = get_ws_content($tmp);
is(scalar @$nodes, 2, 'precisely two windows');
is($nodes->[0]->{id}, $old_id, 'id unchanged');
is($nodes->[0]->{focused}, 1, 'fullscreen window focused');
done_testing; done_testing;