commit a528aea2ee87a211edd3e6df83f2d408656430ab
parent 7ce1038478de99f9328beaa289503826f107ac83
Author: emersion <contact@emersion.fr>
Date: Thu, 5 Apr 2018 17:11:46 -0400
Make xwayland surface destroy more foolproof
Diffstat:
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
@@ -176,12 +176,6 @@ static void handle_commit(struct wl_listener *listener, void *data) {
view_damage_from(view);
}
-static void handle_destroy(struct wl_listener *listener, void *data) {
- struct sway_xwayland_view *xwayland_view =
- wl_container_of(listener, xwayland_view, destroy);
- view_destroy(&xwayland_view->view);
-}
-
static void handle_unmap(struct wl_listener *listener, void *data) {
struct sway_xwayland_view *xwayland_view =
wl_container_of(listener, xwayland_view, unmap);
@@ -205,6 +199,17 @@ static void handle_map(struct wl_listener *listener, void *data) {
view_map(view, xsurface->surface);
}
+static void handle_destroy(struct wl_listener *listener, void *data) {
+ struct sway_xwayland_view *xwayland_view =
+ wl_container_of(listener, xwayland_view, destroy);
+ struct sway_view *view = &xwayland_view->view;
+ struct wlr_xwayland_surface *xsurface = view->wlr_xwayland_surface;
+ if (xsurface->mapped) {
+ handle_unmap(&xwayland_view->unmap, xsurface);
+ }
+ view_destroy(&xwayland_view->view);
+}
+
static void handle_request_configure(struct wl_listener *listener, void *data) {
struct sway_xwayland_view *xwayland_view =
wl_container_of(listener, xwayland_view, request_configure);