]> git.sur5r.net Git - i3/i3/commitdiff
bugfix: forgot to mark split containers as split = true (+test) (Thanks szalik)
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 5 Sep 2012 20:03:45 +0000 (22:03 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 5 Sep 2012 20:26:52 +0000 (22:26 +0200)
When the workspace layout (formerly orientation) was forced to change
due to a move command, the split container we created was not marked as
split = true, which caused tree_flatten() to errnously kill the contents
of it and thus one window ended up unmanaged.

Also, the logic in tree_flatten() was inverted due to commit de94f6da.

fixes #790

src/tree.c
src/workspace.c
testcases/t/197-regression-move-vanish.t [new file with mode: 0644]

index 2c1c257e0235c569e869a20f8ca4d696b6b6899f..321bc78a5951b2b9fa13c78819301f53049b5d49 100644 (file)
@@ -617,8 +617,8 @@ void tree_flatten(Con *con) {
 
     /* The child must have a different orientation than the con but the same as
      * the con’s parent to be redundant */
-    if (con->split ||
-        child->split ||
+    if (!con->split ||
+        !child->split ||
         con_orientation(con) == con_orientation(child) ||
         con_orientation(child) != con_orientation(parent))
         goto recurse;
index 853311816538f516caf9200f94c9d354abf78247..1749959aa20c9c416fa8dde3b57b1235a43ef67d 100644 (file)
@@ -699,6 +699,7 @@ void ws_force_orientation(Con *ws, orientation_t orientation) {
     /* 1: create a new split container */
     Con *split = con_new(NULL, NULL);
     split->parent = ws;
+    split->split = true;
 
     /* 2: copy layout from workspace */
     split->layout = ws->layout;
@@ -715,9 +716,10 @@ void ws_force_orientation(Con *ws, orientation_t orientation) {
 
     /* 4: switch workspace layout */
     ws->layout = (orientation == HORIZ) ? L_SPLITH : L_SPLITV;
+    DLOG("split->layout = %d, ws->layout = %d\n", split->layout, ws->layout);
 
     /* 5: attach the new split container to the workspace */
-    DLOG("Attaching new split to ws\n");
+    DLOG("Attaching new split (%p) to ws (%p)\n", split, ws);
     con_attach(split, ws, false);
 
     /* 6: fix the percentages */
diff --git a/testcases/t/197-regression-move-vanish.t b/testcases/t/197-regression-move-vanish.t
new file mode 100644 (file)
index 0000000..41c7b87
--- /dev/null
@@ -0,0 +1,21 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+# Regression test: moving a window to the right out of a splitv container would
+# make it vanish.
+# Ticket: #790
+# Bug still in: 4.2-277-ga598544
+use i3test;
+
+my $ws = fresh_workspace;
+
+my $top = open_window;
+cmd 'split v';
+my $bottom = open_window;
+
+is_num_children($ws, 2, 'two windows on workspace level');
+
+cmd 'move right';
+
+is_num_children($ws, 2, 'still two windows on workspace level');
+
+done_testing;