]> git.sur5r.net Git - i3/i3/blobdiff - testcases/t/294-focus-order.t
tree_move: Don't change focus order when swapping containers
[i3/i3] / testcases / t / 294-focus-order.t
index 71f19ded7e907fc73af0623e63d7bdc88f0375f0..6b16540c85d68e17285969962687ac6ea17e8867 100644 (file)
 #
 # Verify that the corrent focus stack order is preserved after various
 # operations.
-use i3test;
+use i3test i3_config => <<EOT;
+# i3 config file (v4)
+font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+fake-outputs 1024x768+0+0,1024x768+1024+0
+EOT
 
 sub kill_and_confirm_focus {
     my $focus = shift;
@@ -68,7 +72,6 @@ confirm_focus('tabbed');
 #####################################################################
 
 fresh_workspace;
-
 $windows[3] = open_window;
 $windows[1] = open_window;
 $windows[0] = open_window;
@@ -107,6 +110,37 @@ $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.
@@ -141,4 +175,70 @@ 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;