Close all children when closing a workspace

fixes #591
This commit is contained in:
jj 2013-09-19 14:34:02 +02:00 committed by Michael Stapelberg
parent 153259cb10
commit 97b086efd9
2 changed files with 29 additions and 4 deletions

View File

@ -229,6 +229,11 @@ bool tree_close(Con *con, kill_window_t kill_window, bool dont_kill_parent, bool
return false; return false;
} }
if (workspace_is_visible(con)) {
DLOG("A visible workspace cannot be killed.\n");
return false;
}
if (con->window != NULL) { if (con->window != NULL) {
if (kill_window != DONT_KILL_WINDOW) { if (kill_window != DONT_KILL_WINDOW) {
x_window_kill(con->window->id, 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) { void tree_close_con(kill_window_t kill_window) {
assert(focused != NULL); assert(focused != NULL);
if (focused->type == CT_WORKSPACE) {
LOG("Cannot close workspace\n");
return;
}
/* There *should* be no possibility to focus outputs / root container */ /* There *should* be no possibility to focus outputs / root container */
assert(focused->type != CT_OUTPUT); assert(focused->type != CT_OUTPUT);

View File

@ -119,6 +119,30 @@ sync_with_i3;
is(get_focused($tmp), $middle, 'middle container focused'); 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: # and now for something completely different:
# check if the pointer position is relevant when restoring focus # check if the pointer position is relevant when restoring focus