Fix endless loop when trying to kill a visible workspace
This regression was introduced with commit
97b086efd9
fixes #1103
This commit is contained in:
parent
f9d8a1b4d6
commit
eef9042713
18
src/tree.c
18
src/tree.c
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue