Split workspace instead of changing orientation

Move all children of the workspace into a new container if there is more
than one otherwise simply change the orientation.

fixes #922
This commit is contained in:
Mats 2013-01-24 17:56:03 +01:00 committed by Michael Stapelberg
parent 1e3075e69b
commit fa4301e06d
2 changed files with 33 additions and 7 deletions

View File

@ -373,17 +373,23 @@ void tree_close_con(kill_window_t kill_window) {
*
*/
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. */

View File

@ -158,4 +158,24 @@ is(get_output_content()->{layout}, 'splith', 'content container layout ok');
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;