Fix endless loop when trying to kill a visible workspace

This regression was introduced with commit
97b086efd9

fixes #1103
This commit is contained in:
jj 2013-10-11 20:12:05 +02:00 committed by Michael Stapelberg
parent f9d8a1b4d6
commit eef9042713
1 changed files with 13 additions and 5 deletions

View File

@ -229,11 +229,6 @@ 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);
@ -369,6 +364,19 @@ void tree_close_con(kill_window_t kill_window) {
assert(focused->type != CT_OUTPUT); assert(focused->type != CT_OUTPUT);
assert(focused->type != CT_ROOT); 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 */ /* Kill con */
tree_close(focused, kill_window, false, false); tree_close(focused, kill_window, false, false);
} }