]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly attach floating Cons to a different workspace, extend testcase
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 29 Nov 2010 19:39:56 +0000 (20:39 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 29 Nov 2010 19:39:56 +0000 (20:39 +0100)
src/con.c
testcases/t/32-move-workspace.t

index ab06cfde47c30391117984da0a157894521fac52..57ed12e0e2cfdd8ba37444a4c1f8f7f9094a94fb 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -106,22 +106,27 @@ void con_attach(Con *con, Con *parent, bool ignore_focus) {
         goto add_to_focus_head;
     }
 
-    if (!ignore_focus) {
-        /* Get the first tiling container in focus stack */
-        TAILQ_FOREACH(loop, &(parent->focus_head), focused) {
-            if (loop->type == CT_FLOATING_CON)
-                continue;
-            current = loop;
-            break;
+    if (con->type == CT_FLOATING_CON) {
+        DLOG("Inserting into floating containers\n");
+        TAILQ_INSERT_TAIL(&(parent->floating_head), con, floating_windows);
+    } else {
+        if (!ignore_focus) {
+            /* Get the first tiling container in focus stack */
+            TAILQ_FOREACH(loop, &(parent->focus_head), focused) {
+                if (loop->type == CT_FLOATING_CON)
+                    continue;
+                current = loop;
+                break;
+            }
         }
-    }
 
-    /* Insert the container after the tiling container, if found */
-    if (current) {
-        DLOG("Inserting con = %p after last focused tiling con %p\n",
-             con, current);
-        TAILQ_INSERT_AFTER(nodes_head, current, con, nodes);
-    } else TAILQ_INSERT_TAIL(nodes_head, con, nodes);
+        /* Insert the container after the tiling container, if found */
+        if (current) {
+            DLOG("Inserting con = %p after last focused tiling con %p\n",
+                 con, current);
+            TAILQ_INSERT_AFTER(nodes_head, current, con, nodes);
+        } else TAILQ_INSERT_TAIL(nodes_head, con, nodes);
+    }
 
 add_to_focus_head:
     /* We insert to the TAIL because con_focus() will correct this.
index 09e90a8caeb5a5823dfd86defeba70312722c8b7..871be6da57a4998163a944ad1f8d9ecc79f9d641 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Checks if the 'move workspace' command works correctly
 #
-use i3test tests => 7;
+use i3test tests => 11;
 use Time::HiRes qw(sleep);
 
 my $i3 = i3("/tmp/nestedcons");
@@ -38,4 +38,26 @@ is($focus->[0], $second, 'same container on different ws');
 ($nodes, $focus) = get_ws_content($tmp);
 is($nodes->[0]->{focused}, 1, 'first container focused on first ws');
 
+###################################################################
+# check if floating cons are moved to new workspaces properly
+# (that is, if they are floating on the target ws, too)
+###################################################################
+
+$tmp = get_unused_workspace();
+$tmp2 = get_unused_workspace();
+cmd "workspace $tmp";
+
+cmd "open";
+cmd "mode toggle";
+
+my $ws = get_ws($tmp);
+is(@{$ws->{nodes}}, 0, 'no nodes on workspace');
+is(@{$ws->{floating_nodes}}, 1, 'one floating node on workspace');
+
+cmd "move workspace $tmp2";
+
+$ws = get_ws($tmp2);
+is(@{$ws->{nodes}}, 0, 'no nodes on workspace');
+is(@{$ws->{floating_nodes}}, 1, 'one floating node on workspace');
+
 diag( "Testing i3, Perl $], $^X" );