Bugfix: Correctly attach floating Cons to a different workspace, extend testcase

This commit is contained in:
Michael Stapelberg 2010-11-29 20:39:56 +01:00
parent 613866dbc0
commit 0f0d01336b
2 changed files with 42 additions and 15 deletions

View File

@ -106,6 +106,10 @@ void con_attach(Con *con, Con *parent, bool ignore_focus) {
goto add_to_focus_head; goto add_to_focus_head;
} }
if (con->type == CT_FLOATING_CON) {
DLOG("Inserting into floating containers\n");
TAILQ_INSERT_TAIL(&(parent->floating_head), con, floating_windows);
} else {
if (!ignore_focus) { if (!ignore_focus) {
/* Get the first tiling container in focus stack */ /* Get the first tiling container in focus stack */
TAILQ_FOREACH(loop, &(parent->focus_head), focused) { TAILQ_FOREACH(loop, &(parent->focus_head), focused) {
@ -122,6 +126,7 @@ void con_attach(Con *con, Con *parent, bool ignore_focus) {
con, current); con, current);
TAILQ_INSERT_AFTER(nodes_head, current, con, nodes); TAILQ_INSERT_AFTER(nodes_head, current, con, nodes);
} else TAILQ_INSERT_TAIL(nodes_head, con, nodes); } else TAILQ_INSERT_TAIL(nodes_head, con, nodes);
}
add_to_focus_head: add_to_focus_head:
/* We insert to the TAIL because con_focus() will correct this. /* We insert to the TAIL because con_focus() will correct this.

View File

@ -3,7 +3,7 @@
# #
# Checks if the 'move workspace' command works correctly # Checks if the 'move workspace' command works correctly
# #
use i3test tests => 7; use i3test tests => 11;
use Time::HiRes qw(sleep); use Time::HiRes qw(sleep);
my $i3 = i3("/tmp/nestedcons"); my $i3 = i3("/tmp/nestedcons");
@ -38,4 +38,26 @@ is($focus->[0], $second, 'same container on different ws');
($nodes, $focus) = get_ws_content($tmp); ($nodes, $focus) = get_ws_content($tmp);
is($nodes->[0]->{focused}, 1, 'first container focused on first ws'); is($nodes->[0]->{focused}, 1, 'first container focused on first ws');
###################################################################
# check if floating cons are moved to new workspaces properly
# (that is, if they are floating on the target ws, too)
###################################################################
$tmp = get_unused_workspace();
$tmp2 = get_unused_workspace();
cmd "workspace $tmp";
cmd "open";
cmd "mode toggle";
my $ws = get_ws($tmp);
is(@{$ws->{nodes}}, 0, 'no nodes on workspace');
is(@{$ws->{floating_nodes}}, 1, 'one floating node on workspace');
cmd "move workspace $tmp2";
$ws = get_ws($tmp2);
is(@{$ws->{nodes}}, 0, 'no nodes on workspace');
is(@{$ws->{floating_nodes}}, 1, 'one floating node on workspace');
diag( "Testing i3, Perl $], $^X" ); diag( "Testing i3, Perl $], $^X" );