From 0f0d01336b3ba0167f93a28671c6ad048c64460b Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 29 Nov 2010 20:39:56 +0100 Subject: [PATCH] Bugfix: Correctly attach floating Cons to a different workspace, extend testcase --- src/con.c | 33 +++++++++++++++++++-------------- testcases/t/32-move-workspace.t | 24 +++++++++++++++++++++++- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/con.c b/src/con.c index ab06cfde..57ed12e0 100644 --- a/src/con.c +++ b/src/con.c @@ -106,22 +106,27 @@ void con_attach(Con *con, Con *parent, bool ignore_focus) { goto add_to_focus_head; } - if (!ignore_focus) { - /* Get the first tiling container in focus stack */ - TAILQ_FOREACH(loop, &(parent->focus_head), focused) { - if (loop->type == CT_FLOATING_CON) - continue; - current = loop; - break; + 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) { + /* Get the first tiling container in focus stack */ + TAILQ_FOREACH(loop, &(parent->focus_head), focused) { + if (loop->type == CT_FLOATING_CON) + continue; + current = loop; + break; + } } - } - /* Insert the container after the tiling container, if found */ - if (current) { - DLOG("Inserting con = %p after last focused tiling con %p\n", - con, current); - TAILQ_INSERT_AFTER(nodes_head, current, con, nodes); - } else TAILQ_INSERT_TAIL(nodes_head, con, nodes); + /* Insert the container after the tiling container, if found */ + if (current) { + DLOG("Inserting con = %p after last focused tiling con %p\n", + con, current); + TAILQ_INSERT_AFTER(nodes_head, current, con, nodes); + } else TAILQ_INSERT_TAIL(nodes_head, con, nodes); + } add_to_focus_head: /* We insert to the TAIL because con_focus() will correct this. diff --git a/testcases/t/32-move-workspace.t b/testcases/t/32-move-workspace.t index 09e90a8c..871be6da 100644 --- a/testcases/t/32-move-workspace.t +++ b/testcases/t/32-move-workspace.t @@ -3,7 +3,7 @@ # # Checks if the 'move workspace' command works correctly # -use i3test tests => 7; +use i3test tests => 11; use Time::HiRes qw(sleep); my $i3 = i3("/tmp/nestedcons"); @@ -38,4 +38,26 @@ is($focus->[0], $second, 'same container on different ws'); ($nodes, $focus) = get_ws_content($tmp); 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" );