*
*/
void tree_split(Con *con, orientation_t orientation) {
- /* for a workspace, we just need to change orientation */
- if (con->type == CT_WORKSPACE) {
- DLOG("Workspace, simply changing orientation to %d\n", orientation);
- con->layout = (orientation == HORIZ) ? L_SPLITH : L_SPLITV;
- return;
- }
- else if (con->type == CT_FLOATING_CON) {
+ if (con->type == CT_FLOATING_CON) {
DLOG("Floating containers can't be split.\n");
return;
}
+ if (con->type == CT_WORKSPACE) {
+ if (con_num_children(con) < 2) {
+ DLOG("Just changing orientation of workspace\n");
+ con->layout = (orientation == HORIZ) ? L_SPLITH : L_SPLITV;
+ return;
+ } else {
+ /* if there is more than one container on the workspace
+ * move them into a new container and handle this instead */
+ con = workspace_encapsulate(con);
+ }
+ }
+
Con *parent = con->parent;
/* Force re-rendering to make the indicator border visible. */
cmd 'layout stacked';
is(get_output_content()->{layout}, 'splith', 'content container layout still ok');
+######################################################################
+# Splitting a workspace that has more than one child
+######################################################################
+
+$tmp = fresh_workspace;
+
+cmd 'open';
+cmd 'open';
+cmd 'focus parent';
+cmd 'split v';
+cmd 'open';
+
+my $content = get_ws_content($tmp);
+my $fst = $content->[0];
+my $snd = $content->[1];
+
+is(@{$content}, 2, 'two containers on workspace');
+is(@{$fst->{nodes}}, 2, 'first child has two children');
+is(@{$snd->{nodes}}, 0, 'second child has no children');
+
done_testing;