Bugfix: don’t flatten tabbed/stacked containers

fixes #1053
This commit is contained in:
Michael Stapelberg 2013-09-01 13:35:04 +02:00
parent a68a911a30
commit 2481b9dcd7
2 changed files with 36 additions and 0 deletions

View File

@ -702,6 +702,8 @@ void tree_flatten(Con *con) {
* the cons parent to be redundant */ * the cons parent to be redundant */
if (!con_is_split(con) || if (!con_is_split(con) ||
!con_is_split(child) || !con_is_split(child) ||
(con->layout != L_SPLITH && con->layout != L_SPLITV) ||
(child->layout != L_SPLITH && child->layout != L_SPLITV) ||
con_orientation(con) == con_orientation(child) || con_orientation(con) == con_orientation(child) ||
con_orientation(child) != con_orientation(parent)) con_orientation(child) != con_orientation(parent))
goto recurse; goto recurse;

View File

@ -38,4 +38,38 @@ my $ws = get_ws($tmp);
is($ws->{layout}, 'splith', 'workspace layout is splith'); is($ws->{layout}, 'splith', 'workspace layout is splith');
is(@{$ws->{nodes}}, 3, 'all three windows on workspace level'); is(@{$ws->{nodes}}, 3, 'all three windows on workspace level');
################################################################################
# Ticket #1053 provides a sequence of operations where the flattening does not
# work correctly:
################################################################################
$tmp = fresh_workspace;
my $tab1 = open_window;
my $tab2 = open_window;
$mid = open_window;
$right = open_window;
cmd 'focus right';
cmd 'split v';
cmd 'focus right';
cmd 'move left';
cmd 'layout tabbed';
cmd 'focus parent';
cmd 'split v';
$ws = get_ws($tmp);
my @nodes = @{$ws->{nodes}};
is(@nodes, 3, 'all three windows on workspace level');
is($nodes[0]->{layout}, 'splitv', 'first node is splitv');
is(@{$nodes[0]->{nodes}}, 1, 'one node in the first node');
is($nodes[0]->{nodes}->[0]->{layout}, 'tabbed', 'tabbed layout');
is(@{$nodes[0]->{nodes}->[0]->{nodes}}, 2, 'two nodes in that node');
cmd 'focus right';
cmd 'move left';
$ws = get_ws($tmp);
@nodes = @{$ws->{nodes}};
is(@nodes, 2, 'all three windows on workspace level');
done_testing; done_testing;