Bugfix: Insert new containers at the right position (and add testcase)

This commit is contained in:
Michael Stapelberg 2010-07-03 17:42:36 +02:00
parent 66fc795379
commit 49ed703299
2 changed files with 54 additions and 1 deletions

View File

@ -58,7 +58,14 @@ Con *con_new(Con *parent) {
void con_attach(Con *con, Con *parent) { void con_attach(Con *con, Con *parent) {
con->parent = parent; con->parent = parent;
Con *current = TAILQ_FIRST(&(parent->focus_head));
if (current == TAILQ_END(&(parent->focus_head)))
TAILQ_INSERT_TAIL(&(parent->nodes_head), con, nodes); TAILQ_INSERT_TAIL(&(parent->nodes_head), con, nodes);
else {
DLOG("inserting after\n");
TAILQ_INSERT_AFTER(&(parent->nodes_head), current, con, nodes);
}
/* We insert to the TAIL because con_focus() will correct this. /* We insert to the TAIL because con_focus() will correct this.
* This way, we have the option to insert Cons without having * This way, we have the option to insert Cons without having
* to focus them. */ * to focus them. */

View File

@ -0,0 +1,46 @@
#!perl
# vim:ts=4:sw=4:expandtab
#
# Check if new containers are opened after the currently focused one instead
# of always at the end
use List::Util qw(first);
use i3test tests => 7;
my $i3 = i3("/tmp/nestedcons");
my $tmp = get_unused_workspace();
$i3->command("workspace $tmp")->recv;
ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
# Open two new container
$i3->command("open")->recv;
ok(@{get_ws_content($tmp)} == 1, 'containers opened');
my ($nodes, $focus) = get_ws_content($tmp);
my $first = $focus->[0];
$i3->command("open")->recv;
($nodes, $focus) = get_ws_content($tmp);
my $second = $focus->[0];
isnt($first, $second, 'different container focused');
##############################################################
# see if new containers open after the currently focused
##############################################################
$i3->command(qq|[con_id="$first"] focus|)->recv;
$i3->command('open')->recv;
$content = get_ws_content($tmp);
ok(@{$content} == 3, 'three containers opened');
is($content->[0]->{id}, $first, 'first container unmodified');
isnt($content->[1]->{id}, $second, 'second container replaced');
is($content->[2]->{id}, $second, 'third container unmodified');
diag( "Testing i3, Perl $], $^X" );
#