]> git.sur5r.net Git - i3/i3/commitdiff
Fix endless loop when trying to kill a visible workspace
authorjj <haptix@web.de>
Fri, 11 Oct 2013 18:12:05 +0000 (20:12 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 13 Oct 2013 15:58:38 +0000 (17:58 +0200)
This regression was introduced with commit
97b086efd9833d2a787e54417789b279143e43a6

fixes #1103

src/tree.c

index 4df9f5938e48b8b1af04c0c285a8c1ed50651cd8..65d709a557220489ab2b0f1c7a8ee4cc9f4af3aa 100644 (file)
@@ -229,11 +229,6 @@ bool tree_close(Con *con, kill_window_t kill_window, bool dont_kill_parent, bool
         return false;
     }
 
-    if (workspace_is_visible(con)) {
-        DLOG("A visible workspace cannot be killed.\n");
-        return false;
-    }
-
     if (con->window != NULL) {
         if (kill_window != DONT_KILL_WINDOW) {
             x_window_kill(con->window->id, kill_window);
@@ -369,6 +364,19 @@ void tree_close_con(kill_window_t kill_window) {
     assert(focused->type != CT_OUTPUT);
     assert(focused->type != CT_ROOT);
 
+    if (focused->type == CT_WORKSPACE) {
+        DLOG("Workspaces cannot be close, closing all children instead\n");
+        Con *child, *nextchild;
+        for (child = TAILQ_FIRST(&(focused->nodes_head)); child; ) {
+            nextchild = TAILQ_NEXT(child, nodes);
+            DLOG("killing child=%p\n", child);
+            tree_close(child, kill_window, false, false);
+            child = nextchild;
+        }
+
+        return;
+    }
+
     /* Kill con */
     tree_close(focused, kill_window, false, false);
 }