]> git.sur5r.net Git - i3/i3/commitdiff
Restrict "move to workspace" commands in fullscreen.
authorFernando Tarlá Cardoso Lemos <fernandotcl@gmail.com>
Sun, 27 May 2012 01:13:16 +0000 (22:13 -0300)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 3 Jun 2012 14:24:53 +0000 (16:24 +0200)
src/con.c
testcases/t/156-fullscreen-focus.t

index a7ae642b3e496e2232725fc5e672d0b0bed0c7fb..a1491e03fb696ba2f1cc5ce1cb8130fb7e53cf73 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -576,6 +576,12 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
         return;
     }
 
+    /* Prevent moving if this would violate the fullscreen focus restrictions. */
+    if (!con_fullscreen_permits_focusing(workspace)) {
+        LOG("Cannot move out of a fullscreen container");
+        return;
+    }
+
     if (con_is_floating(con)) {
         DLOG("Using FLOATINGCON instead\n");
         con = con->parent;
index af205c45732ffa5a5b33ecae78136bd97103e095..b779ce7d8490286a95088aacd2b4d2619b640c5b 100644 (file)
@@ -237,22 +237,59 @@ 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 {
+sub verify_move {
+    my $num = shift;
     my $msg = shift;
     my $nodes = get_ws_content($tmp2);
     my $split = $nodes->[1];
     my $fs = $split->{nodes}->[1];
-    is(scalar @{$fs->{nodes}}, 2, $msg);
+    is(scalar @{$fs->{nodes}}, $num, $msg);
 }
 
 cmd 'move left';
-verify_move_prevented('prevented move left');
+verify_move(2, 'prevented move left');
 cmd 'move right';
-verify_move_prevented('prevented move right');
+verify_move(2, 'prevented move right');
 cmd 'move down';
-verify_move_prevented('prevented move down');
+verify_move(2, 'prevented move down');
 cmd 'move up';
 cmd 'move up';
-verify_move_prevented('prevented move up');
+verify_move(2, 'prevented move up');
+
+################################################################################
+# Moving to a different workspace is allowed with per-output fullscreen
+# containers.
+################################################################################
+
+cmd "move to workspace $tmp";
+verify_move(1, 'did not prevent move to workspace by name');
+
+cmd "workspace $tmp";
+cmd "move to workspace $tmp2";
+cmd "workspace $tmp2";
+
+cmd "move to workspace prev";
+verify_move(1, 'did not prevent move to workspace by position');
+
+################################################################################
+# Ensure that is not allowed with global fullscreen containers.
+################################################################################
+
+cmd "workspace $tmp";
+cmd "move to workspace $tmp2";
+cmd "workspace $tmp2";
+
+cmd 'focus parent';
+cmd 'fullscreen';
+cmd 'fullscreen global';
+cmd 'focus child';
+
+cmd "move to workspace $tmp";
+verify_move(2, 'prevented move to workspace by name');
+
+cmd "move to workspace prev";
+verify_move(2, 'prevented move to workspace by position');
+
+# TODO: Tests for "move to output" and "move workspace to output".
 
 done_testing;