Close all children when closing a workspace
Patch status: needinfo
Patch by jj
Long description:
fixes #591
To apply this patch, use:
curl http://cr.i3wm.org/patch/226/raw.patch | git am
b/src/tree.c
15 |
@@ -229,6 +229,11 @@ bool tree_close(Con *con, kill_window_t kill_window, bool dont_kill_parent, bool |
16 |
return false; |
17 |
} |
18 |
|
19 |
+ if (workspace_is_visible(con)) { |
20 |
+ DLOG("A visible workspace cannot be killed.\n"); |
21 |
+ return false; |
22 |
+ } |
23 |
+ |
24 |
if (con->window != NULL) { |
25 |
if (kill_window != DONT_KILL_WINDOW) { |
26 |
x_window_kill(con->window->id, kill_window); |
27 |
@@ -359,10 +364,6 @@ bool tree_close(Con *con, kill_window_t kill_window, bool dont_kill_parent, bool |
28 |
*/ |
29 |
void tree_close_con(kill_window_t kill_window) { |
30 |
assert(focused != NULL); |
31 |
- if (focused->type == CT_WORKSPACE) { |
32 |
- LOG("Cannot close workspace\n"); |
33 |
- return; |
34 |
- } |
35 |
|
36 |
/* There *should* be no possibility to focus outputs / root container */ |
37 |
assert(focused->type != CT_OUTPUT); |
b/testcases/t/129-focus-after-close.t
42 |
@@ -120,6 +120,30 @@ sync_with_i3; |
43 |
is(get_focused($tmp), $middle, 'middle container focused'); |
44 |
|
45 |
############################################################## |
46 |
+# check if the workspace container can be closed |
47 |
+############################################################## |
48 |
+ |
49 |
+$tmp = fresh_workspace; |
50 |
+ |
51 |
+my $window = open_window(); |
52 |
+ |
53 |
+# one window opened on the current workspace |
54 |
+($nodes, $focus) = get_ws_content($tmp); |
55 |
+is(scalar @$nodes, 1, 'workspace contains one node'); |
56 |
+ |
57 |
+# focus the workspace |
58 |
+cmd "focus parent"; |
59 |
+cmd "focus parent"; |
60 |
+ |
61 |
+# try to kill the workspace |
62 |
+cmd "kill"; |
63 |
+sync_with_i3; |
64 |
+ |
65 |
+# the workspace should now be empty |
66 |
+($nodes, $focus) = get_ws_content($tmp); |
67 |
+is(scalar @$nodes, 0, 'workspace is empty'); |
68 |
+ |
69 |
+############################################################## |
70 |
# and now for something completely different: |
71 |
# check if the pointer position is relevant when restoring focus |
72 |
# (it should not be relevant, of course) |