From 81ed1efe4f715d884c26c22f76e6a92f75893783 Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 18 Feb 2019 13:14:35 +0100 Subject: [PATCH] xwayland, data-device: fix surface state on unmap This commit makes sure surface->mapped is true when the unmapped event is emitted. This is necessary because listeners can only damage surfaces that are mapped. This is similar to the fact that the destroy event is emitted before any destruction is actually made. Fixes https://github.com/swaywm/sway/issues/3568 --- types/data_device/wlr_drag.c | 2 +- xwayland/xwm.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/types/data_device/wlr_drag.c b/types/data_device/wlr_drag.c index 558e9f22..fdfabdcf 100644 --- a/types/data_device/wlr_drag.c +++ b/types/data_device/wlr_drag.c @@ -96,8 +96,8 @@ static void drag_icon_set_mapped(struct wlr_drag_icon *icon, bool mapped) { icon->mapped = true; wlr_signal_emit_safe(&icon->events.map, icon); } else if (!mapped && icon->mapped) { - icon->mapped = false; wlr_signal_emit_safe(&icon->events.unmap, icon); + icon->mapped = false; } } diff --git a/xwayland/xwm.c b/xwayland/xwm.c index 9ca2c721..fc99490b 100644 --- a/xwayland/xwm.c +++ b/xwayland/xwm.c @@ -793,8 +793,8 @@ static void xwm_map_shell_surface(struct wlr_xwm *xwm, static void xsurface_unmap(struct wlr_xwayland_surface *surface) { if (surface->mapped) { - surface->mapped = false; wlr_signal_emit_safe(&surface->events.unmap, surface); + surface->mapped = false; xwm_set_net_client_list(surface->xwm); }