From: Michael Stapelberg Date: Mon, 28 Feb 2011 19:44:23 +0000 (+0100) Subject: Fix regression: Don’t add floating nodes twice when restoring layout (+testcase) X-Git-Tag: tree-pr2~25 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b595ff05c534639afa63900cdd16bc4902ee2a12;p=i3%2Fi3 Fix regression: Don’t add floating nodes twice when restoring layout (+testcase) --- diff --git a/src/load_layout.c b/src/load_layout.c index 72b23d9f..92cfecbd 100644 --- a/src/load_layout.c +++ b/src/load_layout.c @@ -22,18 +22,18 @@ struct Match *current_swallow; static int json_start_map(void *ctx) { LOG("start of map, last_key = %s\n", last_key); if (parsing_swallows) { - LOG("TODO: create new swallow\n"); + LOG("creating new swallow\n"); current_swallow = smalloc(sizeof(Match)); match_init(current_swallow); TAILQ_INSERT_TAIL(&(json_node->swallow_head), current_swallow, matches); } else { if (!parsing_rect && !parsing_window_rect && !parsing_geometry) { if (last_key && strcasecmp(last_key, "floating_nodes") == 0) { + DLOG("New floating_node\n"); Con *ws = con_get_workspace(json_node); json_node = con_new(NULL); json_node->parent = ws; - TAILQ_INSERT_TAIL(&(ws->floating_head), json_node, floating_windows); - TAILQ_INSERT_TAIL(&(ws->focus_head), json_node, focused); + DLOG("Parent is workspace = %p\n", ws); } else { Con *parent = json_node; json_node = con_new(NULL); diff --git a/testcases/t/43-regress-floating-restart.t b/testcases/t/43-regress-floating-restart.t new file mode 100644 index 00000000..974c1ae1 --- /dev/null +++ b/testcases/t/43-regress-floating-restart.t @@ -0,0 +1,24 @@ +#!perl +# vim:ts=4:sw=4:expandtab +# +# Regression: floating windows are tiling after restarting, closing them crashes i3 +# +use i3test tests => 1; +use Time::HiRes qw(sleep); +use X11::XCB qw(:all); + +my $tmp = get_unused_workspace(); +cmd "workspace $tmp"; + +cmd 'open'; +cmd 'mode toggle'; +cmd 'restart'; + +sleep 0.5; + +diag('Checking if i3 still lives'); + +does_i3_live; + +my $ws = get_ws($tmp); +diag('ws = ' . Dumper($ws));