summaryrefslogtreecommitdiffstats
path: root/sway/tree/view.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-06-25 16:41:31 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-06-25 16:41:31 +1000
commit9b15e81cff62eb214c89f62bc9e499c7f21d86cf (patch)
tree99e43e2160bae56fa7cc0dbef543ef874b381b01 /sway/tree/view.c
parentImplement per-configure debug timings (diff)
downloadsway-9b15e81cff62eb214c89f62bc9e499c7f21d86cf.tar.gz
sway-9b15e81cff62eb214c89f62bc9e499c7f21d86cf.tar.zst
sway-9b15e81cff62eb214c89f62bc9e499c7f21d86cf.zip
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 (limited to 'sway/tree/view.c')
-rw-r--r--sway/tree/view.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c
index cb36f123..2ca0dbbb 100644
--- 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) {
542struct sway_container *view_unmap(struct sway_view *view) { 542struct sway_container *view_unmap(struct sway_view *view) {
543 wl_signal_emit(&view->events.unmap, view); 543 wl_signal_emit(&view->events.unmap, view);
544 544
545 wl_list_remove(&view->surface_new_subsurface.link);
546 wl_list_remove(&view->container_reparent.link);
547
545 if (view->is_fullscreen) { 548 if (view->is_fullscreen) {
546 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); 549 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
547 ws->sway_workspace->fullscreen = NULL; 550 ws->sway_workspace->fullscreen = NULL;
551 container_destroy(view->swayc);
552 return ws;
548 } 553 }
549 554
550 wl_list_remove(&view->surface_new_subsurface.link);
551 wl_list_remove(&view->container_reparent.link);
552
553 return container_destroy(view->swayc); 555 return container_destroy(view->swayc);
554} 556}
555 557