diff --git a/src/tree.c b/src/tree.c index 7e632100..5559908f 100644 --- a/src/tree.c +++ b/src/tree.c @@ -350,7 +350,8 @@ void tree_split(Con *con, orientation_t orientation) { /* if we are in a container whose parent contains only one * child (its split functionality is unused so far), we just change the * orientation (more intuitive than splitting again) */ - if (con_num_children(parent) == 1) { + if (con_num_children(parent) == 1 && + parent->layout == L_DEFAULT) { parent->orientation = orientation; DLOG("Just changing orientation of existing container\n"); return; diff --git a/testcases/t/122-split.t b/testcases/t/122-split.t index 71736db4..702679ac 100644 --- a/testcases/t/122-split.t +++ b/testcases/t/122-split.t @@ -88,4 +88,25 @@ cmd 'split v'; my $count = sum_nodes(\@content); is($count, $old_count, 'not more windows after splitting again'); +###################################################################### +# In the special case of being inside a stacked or tabbed container, we don’t +# want this to happen. +###################################################################### + +$tmp = fresh_workspace; + +cmd 'open'; +@content = @{get_ws_content($tmp)}; +is(scalar @content, 1, 'Precisely one container on this ws'); +cmd 'layout stacked'; +@content = @{get_ws_content($tmp)}; +is(scalar @content, 1, 'Still one container on this ws'); +is(scalar @{$content[0]->{nodes}}, 1, 'Stacked con has one child node'); + +cmd 'split h'; +cmd 'open'; +@content = @{get_ws_content($tmp)}; +is(scalar @content, 1, 'Still one container on this ws'); +is(scalar @{$content[0]->{nodes}}, 1, 'Stacked con still has one child node'); + done_testing;