commit 9b15e81cff62eb214c89f62bc9e499c7f21d86cf
parent c371ff3de8abbaf3428eadb905d7f940281196c1
Author: Ryan Dwyer <ryandwyer1@gmail.com>
Date: Mon, 25 Jun 2018 16:41:31 +1000
Fix potential crash when fullscreen view unmaps
It happened when a view is a grandchild or deeper of the workspace, is
fullscreen, and unmaps. The workspace would not be included in the
transaction and its pointer to the fullscreen view was left dangling.
Diffstat:
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/sway/tree/view.c b/sway/tree/view.c
@@ -542,14 +542,16 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) {
struct sway_container *view_unmap(struct sway_view *view) {
wl_signal_emit(&view->events.unmap, view);
+ wl_list_remove(&view->surface_new_subsurface.link);
+ wl_list_remove(&view->container_reparent.link);
+
if (view->is_fullscreen) {
struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
ws->sway_workspace->fullscreen = NULL;
+ container_destroy(view->swayc);
+ return ws;
}
- wl_list_remove(&view->surface_new_subsurface.link);
- wl_list_remove(&view->container_reparent.link);
-
return container_destroy(view->swayc);
}