diff --git a/sway/tree/view.c b/sway/tree/view.c index 97318daa..78baa705 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -592,19 +592,18 @@ void view_unmap(struct sway_view *view) { view->urgent_timer = NULL; } - struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); - - struct sway_container *parent; - if (container_is_fullscreen_or_child(view->swayc)) { - parent = container_destroy(view->swayc); - arrange_windows(ws->parent); - } else { - parent = container_destroy(view->swayc); - arrange_windows(parent); - } - if (parent->type >= C_WORKSPACE) { // if the workspace still exists + bool was_fullscreen = view->swayc->is_fullscreen; + struct sway_container *surviving_ancestor = container_destroy(view->swayc); + + // If the workspace wasn't reaped + if (surviving_ancestor->type >= C_WORKSPACE) { + struct sway_container *ws = surviving_ancestor->type == C_WORKSPACE ? + surviving_ancestor : + container_parent(surviving_ancestor, C_WORKSPACE); + arrange_windows(was_fullscreen ? ws : surviving_ancestor); workspace_detect_urgent(ws); } + transaction_commit_dirty(); view->surface = NULL; }