aboutsummaryrefslogtreecommitdiffstats
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
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.
-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