/* 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;
/* 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;
/* 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 */
--- /dev/null
+#!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;