X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=blobdiff_plain;f=testcases%2Ft%2F294-focus-order.t;fp=testcases%2Ft%2F294-focus-order.t;h=6b16540c85d68e17285969962687ac6ea17e8867;hp=41c0bf07009f43ed073a9b466b28526503110e0c;hb=1847938d4eeba98260cc79ca45a11a134274c2ea;hpb=c54f5008395b10c046f380cc3069ff779e5d2877 diff --git a/testcases/t/294-focus-order.t b/testcases/t/294-focus-order.t index 41c0bf07..6b16540c 100644 --- a/testcases/t/294-focus-order.t +++ b/testcases/t/294-focus-order.t @@ -16,7 +16,11 @@ # # Verify that the corrent focus stack order is preserved after various # operations. -use i3test; +use i3test i3_config => <= 0; $i--) { @@ -67,7 +72,6 @@ confirm_focus('tabbed'); ##################################################################### fresh_workspace; - $windows[3] = open_window; $windows[1] = open_window; $windows[0] = open_window; @@ -106,4 +110,135 @@ $windows[0] = open_window; cmd 'move left'; confirm_focus('split-v + move'); +##################################################################### +# Test that moving an unfocused container from another output +# maintains the correct focus order. +##################################################################### + +fresh_workspace(output => 0); +$windows[3] = open_window; +fresh_workspace(output => 1); +$windows[2] = open_window; +$windows[1] = open_window; +$windows[0] = open_window; + +cmd '[id=' . $windows[3]->id . '] move right'; +confirm_focus('unfocused move from other output'); + +##################################################################### +# Test that moving an unfocused container inside its original parent +# maintains the correct focus order. +##################################################################### + +fresh_workspace; +$windows[0] = open_window; +$windows[1] = open_window; +cmd 'split v'; +$windows[2] = open_window; +$windows[3] = open_window; +focus_windows; + +cmd '[id=' . $windows[2]->id . '] move up'; +confirm_focus('split-v + unfocused move inside parent'); + +###################################################################### +# Test that moving an unfocused container maintains the correct focus +# order. +# Layout: H [ A V1 [ B C D ] ] +###################################################################### + +fresh_workspace; +$windows[3] = open_window; +$windows[2] = open_window; +cmd 'split v'; +$windows[1] = open_window; +$windows[0] = open_window; + +cmd '[id=' . $windows[3]->id . '] move right'; +confirm_focus('split-v + unfocused move'); + +###################################################################### +# Test that moving an unfocused container from inside a split +# container to another workspace doesn't focus sibling. +###################################################################### + +$ws = fresh_workspace; +$windows[0] = open_window; +$windows[1] = open_window; +cmd 'split v'; +open_window; +cmd 'mark a'; + +cmd '[id=' . $windows[0]->id . '] focus'; +cmd '[con_mark=a] move to workspace ' . get_unused_workspace; + +is(@{get_ws_content($ws)}, 2, 'Sanity check: marked window moved'); +confirm_focus('Move unfocused window from split container'); + +###################################################################### +# Moving containers to another workspace puts them on the top of the +# focus stack but behind the focused container. +###################################################################### + +for my $new_workspace (0 .. 1) { + fresh_workspace; + $windows[2] = open_window; + $windows[1] = open_window; + fresh_workspace if $new_workspace; + $windows[3] = open_window; + $windows[0] = open_window; + cmd 'mark target'; + + cmd '[id=' . $windows[2]->id . '] move to mark target'; + cmd '[id=' . $windows[1]->id . '] move to mark target'; + confirm_focus('\'move to mark\' focus order' . ($new_workspace ? ' when moving containers from other workspace' : '')); +} + +###################################################################### +# Same but with workspace commands. +###################################################################### + +fresh_workspace; +$windows[2] = open_window; +$windows[1] = open_window; +$ws = fresh_workspace; +$windows[3] = open_window; +$windows[0] = open_window; +cmd 'mark target'; + +cmd '[id=' . $windows[2]->id . '] move to workspace ' . $ws; +cmd '[id=' . $windows[1]->id . '] move to workspace ' . $ws; +confirm_focus('\'move to workspace\' focus order when moving containers from other workspace'); + +###################################################################### +# Test focus order with floating and tiling windows. +# See issue: 1975 +###################################################################### + +fresh_workspace; +$windows[2] = open_window; +$windows[0] = open_window; +$windows[3] = open_floating_window; +$windows[1] = open_floating_window; +focus_windows; + +confirm_focus('mix of floating and tiling windows'); + +###################################################################### +# Same but an unfocused tiling window is killed first. +###################################################################### + +fresh_workspace; +$windows[2] = open_window; +$windows[0] = open_window; +$windows[3] = open_floating_window; +$windows[1] = open_floating_window; +focus_windows; + +cmd '[id=' . $windows[1]->id . '] focus'; +cmd '[id=' . $windows[0]->id . '] kill'; + +kill_and_confirm_focus($windows[2]->id, 'window 2 focused after tiling killed'); +kill_and_confirm_focus($windows[3]->id, 'window 3 focused after tiling killed'); + done_testing;