]> git.sur5r.net Git - i3/i3/commitdiff
Close all children when closing a workspace
authorjj <haptix@web.de>
Thu, 19 Sep 2013 12:34:02 +0000 (14:34 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 24 Sep 2013 04:45:52 +0000 (06:45 +0200)
fixes #591

src/tree.c
testcases/t/129-focus-after-close.t

index 58af674b28fd3e6b0980458ad584eba6115383ed..4df9f5938e48b8b1af04c0c285a8c1ed50651cd8 100644 (file)
@@ -229,6 +229,11 @@ 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);
@@ -359,10 +364,6 @@ bool tree_close(Con *con, kill_window_t kill_window, bool dont_kill_parent, bool
  */
 void tree_close_con(kill_window_t kill_window) {
     assert(focused != NULL);
-    if (focused->type == CT_WORKSPACE) {
-        LOG("Cannot close workspace\n");
-        return;
-    }
 
     /* There *should* be no possibility to focus outputs / root container */
     assert(focused->type != CT_OUTPUT);
index df226e84070bf826d9667af576b218df9a13382f..8d9ccbb9e7662ecf9810a9fdd021ea06f0e60b17 100644 (file)
@@ -119,6 +119,30 @@ sync_with_i3;
 
 is(get_focused($tmp), $middle, 'middle container focused');
 
+##############################################################
+# check if the workspace container can be closed
+##############################################################
+
+$tmp = fresh_workspace;
+
+my $window = open_window();
+
+# one window opened on the current workspace
+($nodes, $focus) = get_ws_content($tmp);
+is(scalar @$nodes, 1, 'workspace contains one node');
+
+# focus the workspace
+cmd "focus parent";
+cmd "focus parent";
+
+# try to kill the workspace
+cmd "kill";
+sync_with_i3;
+
+# the workspace should now be empty
+($nodes, $focus) = get_ws_content($tmp);
+is(scalar @$nodes, 0, 'workspace is empty');
+
 ##############################################################
 # and now for something completely different:
 # check if the pointer position is relevant when restoring focus