]> git.sur5r.net Git - i3/i3/commitdiff
Prevent moving out of fullscreen containers.
authorFernando Tarlá Cardoso Lemos <fernandotcl@gmail.com>
Sun, 27 May 2012 00:45:15 +0000 (21:45 -0300)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 3 Jun 2012 14:24:53 +0000 (16:24 +0200)
src/move.c
testcases/t/156-fullscreen-focus.t

index d3065c2490bf1faae92e6882231ece95b1a0fe16..d110312aa57ab9b916b9cfe3073b96943b73a6ea 100644 (file)
@@ -169,6 +169,12 @@ void tree_move(int direction) {
     while (above->parent != same_orientation)
         above = above->parent;
 
+    /* Enforce the fullscreen focus restrictions. */
+    if (!con_fullscreen_permits_focusing(above->parent)) {
+        LOG("Cannot move out of fullscreen container\n");
+        return;
+    }
+
     DLOG("above = %p\n", above);
     Con *next;
     position_t position;
index f76588f9fa0faa60ac5d137bcb946037222e1717..af205c45732ffa5a5b33ecae78136bd97103e095 100644 (file)
@@ -111,7 +111,6 @@ $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';
@@ -234,4 +233,26 @@ is($x->input_focus, $right2->id, 'focus did not leave parent container (3)');
 cmd 'focus up';
 is($x->input_focus, $right22->id, 'focus did not leave parent container (4)');
 
+################################################################################
+# Ensure that moving in a direction doesn't violate the focus restrictions.
+################################################################################
+
+sub verify_move_prevented {
+    my $msg = shift;
+    my $nodes = get_ws_content($tmp2);
+    my $split = $nodes->[1];
+    my $fs = $split->{nodes}->[1];
+    is(scalar @{$fs->{nodes}}, 2, $msg);
+}
+
+cmd 'move left';
+verify_move_prevented('prevented move left');
+cmd 'move right';
+verify_move_prevented('prevented move right');
+cmd 'move down';
+verify_move_prevented('prevented move down');
+cmd 'move up';
+cmd 'move up';
+verify_move_prevented('prevented move up');
+
 done_testing;