From 360e63b8a73836b85b44980ce7e0f77348d43df3 Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Sat, 12 May 2018 19:33:38 +0100
Subject: Don't destroy view child on xdg-popup unmap

---
 sway/desktop/xdg_shell_v6.c | 8 --------
 sway/desktop/xwayland.c     | 4 ----
 2 files changed, 12 deletions(-)

(limited to 'sway/desktop')

diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c
index 8ecb330d..e9051b6c 100644
--- a/sway/desktop/xdg_shell_v6.c
+++ b/sway/desktop/xdg_shell_v6.c
@@ -20,7 +20,6 @@ static void popup_destroy(struct sway_view_child *child) {
 	}
 	struct sway_xdg_popup_v6 *popup = (struct sway_xdg_popup_v6 *)child;
 	wl_list_remove(&popup->new_popup.link);
-	wl_list_remove(&popup->unmap.link);
 	wl_list_remove(&popup->destroy.link);
 	free(popup);
 }
@@ -39,11 +38,6 @@ static void popup_handle_new_popup(struct wl_listener *listener, void *data) {
 	popup_create(wlr_popup, popup->child.view);
 }
 
-static void popup_handle_unmap(struct wl_listener *listener, void *data) {
-	struct sway_xdg_popup_v6 *popup = wl_container_of(listener, popup, unmap);
-	view_child_destroy(&popup->child);
-}
-
 static void popup_handle_destroy(struct wl_listener *listener, void *data) {
 	struct sway_xdg_popup_v6 *popup = wl_container_of(listener, popup, destroy);
 	view_child_destroy(&popup->child);
@@ -62,8 +56,6 @@ static struct sway_xdg_popup_v6 *popup_create(
 
 	wl_signal_add(&xdg_surface->events.new_popup, &popup->new_popup);
 	popup->new_popup.notify = popup_handle_new_popup;
-	wl_signal_add(&xdg_surface->events.unmap, &popup->unmap);
-	popup->unmap.notify = popup_handle_unmap;
 	wl_signal_add(&xdg_surface->events.destroy, &popup->destroy);
 	popup->destroy.notify = popup_handle_destroy;
 
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index 8f935760..1d3c857d 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -82,10 +82,6 @@ static void unmanaged_handle_unmap(struct wl_listener *listener, void *data) {
 static void unmanaged_handle_destroy(struct wl_listener *listener, void *data) {
 	struct sway_xwayland_unmanaged *surface =
 		wl_container_of(listener, surface, destroy);
-	struct wlr_xwayland_surface *xsurface = surface->wlr_xwayland_surface;
-	if (xsurface->mapped) {
-		unmanaged_handle_unmap(&surface->unmap, xsurface);
-	}
 	wl_list_remove(&surface->map.link);
 	wl_list_remove(&surface->unmap.link);
 	wl_list_remove(&surface->destroy.link);
-- 
cgit v1.2.3