diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2018-08-03 09:56:46 +0100 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2018-08-03 09:56:46 +0100 |
| commit | 8e6641bc867787891d85237ffc63ce3a57bbee86 (patch) | |
| tree | 66221fabcc5fb7d5986936d52d56a757ea01909a | |
| parent | 0d2b8ae74a34490a987c3680d8a87dacd777e5c2 (diff) | |
| parent | 6e08a089dd3fa1f983e3d775dd4610911715233e (diff) | |
Merge pull request #2414 from RyanDwyer/fix-inactive-fullscreen-crash
Fix crash when fullscreen view closes on inactive workspace
| -rw-r--r-- | sway/tree/view.c | 21 |
1 files changed, 10 insertions, 11 deletions
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; } |
