X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=testcases%2Ft%2F156-fullscreen-focus.t;h=3a27c9ffa28ea36d50dd35f4f467937f0e6143c6;hb=da1e2327577ac41e222953428e9a739173e24c86;hp=3f08effd4bf152292e22510a9aa55147de509d97;hpb=313a700e861e4c388f7c3af7c31021924dbf4857;p=i3%2Fi3 diff --git a/testcases/t/156-fullscreen-focus.t b/testcases/t/156-fullscreen-focus.t index 3f08effd..3a27c9ff 100644 --- a/testcases/t/156-fullscreen-focus.t +++ b/testcases/t/156-fullscreen-focus.t @@ -2,49 +2,47 @@ # vim:ts=4:sw=4:expandtab # # Test if new containers get focused when there is a fullscreen container at -# the time of launching the new one. +# the time of launching the new one. Also make sure that focusing containers +# in other workspaces work even when there is a fullscreen container. # -use X11::XCB qw(:all); use i3test; -BEGIN { - use_ok('X11::XCB::Window'); -} - -my $x = X11::XCB::Connection->new; my $i3 = i3(get_socket_path()); my $tmp = fresh_workspace; -##################################################################### -# open the left window -##################################################################### +################################################################################ +# Open the left window. +################################################################################ -my $left = open_window($x, { background_color => '#ff0000' }); +my $left = open_window({ background_color => '#ff0000' }); is($x->input_focus, $left->id, 'left window focused'); diag("left = " . $left->id); -##################################################################### -# Open the right window -##################################################################### +################################################################################ +# Open the right window. +################################################################################ -my $right = open_window($x, { background_color => '#00ff00' }); +my $right = open_window({ background_color => '#00ff00' }); diag("right = " . $right->id); -##################################################################### -# Set the right window to fullscreen -##################################################################### +################################################################################ +# Set the right window to fullscreen. +################################################################################ + cmd 'nop setting fullscreen'; cmd 'fullscreen'; -##################################################################### -# Open a third window -##################################################################### +################################################################################ +# Open a third window. Since we're fullscreen, the window won't be # mapped, so +# don't wait for it to be mapped. Instead, just send the map request and sync +# with i3 to make sure i3 recognizes it. +################################################################################ -my $third = open_window($x, { +my $third = open_window({ background_color => '#0000ff', name => 'Third window', dont_map => 1, @@ -52,20 +50,19 @@ my $third = open_window($x, { $third->map; -sync_with_i3 $x; +sync_with_i3; diag("third = " . $third->id); -# move the fullscreen window to a different ws +################################################################################ +# Move the window to a different workspace, and verify that the third window now +# gets focused in the current workspace. +################################################################################ my $tmp2 = get_unused_workspace; cmd "move workspace $tmp2"; -# verify that the third window has the focus - -sync_with_i3($x); - is($x->input_focus, $third->id, 'third window focused'); ################################################################################ @@ -94,4 +91,68 @@ is(scalar @$nodes, 2, 'precisely two windows'); is($nodes->[0]->{id}, $old_id, 'id unchanged'); is($nodes->[0]->{focused}, 1, 'fullscreen window focused'); +################################################################################ +# Ensure it's possible to change focus if it doesn't escape the fullscreen +# container with fullscreen global. We can't even focus a container in a +# different workspace. +################################################################################ + +cmd 'fullscreen'; + +$tmp = fresh_workspace; +cmd "workspace $tmp"; +my $diff_ws = open_window; + +$tmp2 = fresh_workspace; +cmd "workspace $tmp2"; +cmd 'split h'; + +$left = open_window; +my $right1 = open_window; +cmd 'split v'; +my $right2 = open_window; +$nodes = get_ws_content($tmp); + +cmd 'focus parent'; +cmd 'fullscreen global'; + +cmd '[id="' . $right1->id . '"] focus'; +is($x->input_focus, $right1->id, 'upper right window focused'); + +cmd '[id="' . $right2->id . '"] focus'; +is($x->input_focus, $right2->id, 'bottom right window focused'); + +cmd '[id="' . $left->id . '"] focus'; +is($x->input_focus, $right2->id, 'prevented focus change to left window'); + +cmd '[id="' . $diff_ws->id . '"] focus'; +is($x->input_focus, $right2->id, 'prevented focus change to different ws'); + +################################################################################ +# Same tests when we're in non-global fullscreen mode. We toggle fullscreen on +# and off to avoid testing whether focus level works in fullscreen for now. It +# should now be possible to focus a container in a different workspace. +################################################################################ + +cmd 'fullscreen global'; +cmd 'fullscreen global'; + +cmd '[id="' . $right1->id . '"] focus'; +is($x->input_focus, $right1->id, 'upper right window focused'); + +cmd 'focus parent'; +cmd 'fullscreen'; + +cmd '[id="' . $right1->id . '"] focus'; +is($x->input_focus, $right1->id, 'upper right window still focused'); + +cmd '[id="' . $right2->id . '"] focus'; +is($x->input_focus, $right2->id, 'bottom right window focused'); + +cmd '[id="' . $left->id . '"] focus'; +is($x->input_focus, $right2->id, 'prevented focus change to left window'); + +cmd '[id="' . $diff_ws->id . '"] focus'; +is($x->input_focus, $diff_ws->id, 'allowed focus change to different ws'); + done_testing;