]> git.sur5r.net Git - i3/i3/commitdiff
Skip internal workspaces with 'move workspace to output' 3065/head
authorOrestis Floros <orestisf1993@gmail.com>
Fri, 1 Dec 2017 14:12:43 +0000 (16:12 +0200)
committerOrestis Floros <orestisf1993@gmail.com>
Fri, 1 Dec 2017 15:11:32 +0000 (17:11 +0200)
Fixes #3064.

src/commands.c
testcases/t/504-move-workspace-to-output.t

index e68fcd802b1c15e7a20300bd6a5ca2af5a6f27d9..a9187866cd33402ae7dc4431640f16af4cf17804 100644 (file)
@@ -1121,6 +1121,10 @@ void cmd_move_workspace_to_output(I3_CMD, const char *name) {
     owindow *current;
     TAILQ_FOREACH(current, &owindows, owindows) {
         Con *ws = con_get_workspace(current->con);
+        if (con_is_internal(ws)) {
+            continue;
+        }
+
         bool success = workspace_move_to_output(ws, name);
         if (!success) {
             ELOG("Failed to move workspace to output.\n");
index 8e48bafe366c0209da1e22d4aa00347d69468eff..86bad5e505a1b2bb8c6f68834c2cd17f52d8310b 100644 (file)
@@ -179,6 +179,36 @@ cmd '[con_mark=marked] move workspace to output current';
 ($x0, $x1) = workspaces_per_screen();
 ok($ws1 ~~ @$x0, 'ws1 on fake-0');
 
+################################################################################
+# Verify that '[class=".*"] move workspace to output' doesn't fail when
+# containers in the scratchpad are matched.
+# See issue: #3064.
+################################################################################
+my $__i3_scratch = get_ws('__i3_scratch');
+is(scalar @{$__i3_scratch->{floating_nodes}}, 0, 'scratchpad is empty');
+
+my $ws0 = fresh_workspace(output => 0);
+open_window(wm_class => 'a');
+
+my $ws1 = fresh_workspace(output => 1);
+open_window(wm_class => 'b');
+my $scratchpad_window = open_window(wm_class => 'c');
+cmd 'move to scratchpad';
+
+($x0, $x1) = workspaces_per_screen();
+ok($ws0 ~~ @$x0, 'ws0 on fake-0');
+ok($ws1 ~~ @$x1, 'ws1 on fake-1');
+
+my $reply = cmd '[class=".*"] move workspace to output fake-1';
+ok($reply->[0]->{success}, 'move successful');
+
+($x0, $x1) = workspaces_per_screen();
+ok($ws0 ~~ @$x1, 'ws0 on fake-1');
+ok($ws1 ~~ @$x1, 'ws1 on fake-1');
+
+$__i3_scratch = get_ws('__i3_scratch');
+is(scalar @{$__i3_scratch->{floating_nodes}}, 1, 'window still in scratchpad');
+
 ################################################################################
 
 done_testing;