]> git.sur5r.net Git - i3/i3/commitdiff
Fix regression: Don’t add floating nodes twice when restoring layout (+testcase)
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 28 Feb 2011 19:44:23 +0000 (20:44 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 28 Feb 2011 19:44:23 +0000 (20:44 +0100)
src/load_layout.c
testcases/t/43-regress-floating-restart.t [new file with mode: 0644]

index 72b23d9f1d57d5f7b7646400d6f48d20fab7a201..92cfecbd79d4c94b417636361c88f70d7adf09a6 100644 (file)
@@ -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 (file)
index 0000000..974c1ae
--- /dev/null
@@ -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));