From 9046d2424ab388a0acde1bf0a0c51e292d146f9f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Fri, 10 Jan 2014 00:25:30 -0800 Subject: [PATCH] shell: Orphan child windows when a shell surface is destroyed We now track the child surfaces of a shell surface and the child surfaces have a pointer back to their parent. We need to clean all this up and NULL out the childrens parent pointers when a shell surface is destroyed. Closes: https://bugs.freedesktop.org/show_bug.cgi?id=72931 --- desktop-shell/shell.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index c82c00f..a8c4b3e 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2853,6 +2853,8 @@ static const struct wl_shell_surface_interface shell_surface_implementation = { static void destroy_shell_surface(struct shell_surface *shsurf) { + struct shell_surface *child, *next; + wl_signal_emit(&shsurf->destroy_signal, shsurf); if (!wl_list_empty(&shsurf->popup.grab_link)) { @@ -2877,6 +2879,10 @@ destroy_shell_surface(struct shell_surface *shsurf) weston_view_destroy(shsurf->view); wl_list_remove(&shsurf->children_link); + wl_list_for_each_safe(child, next, &shsurf->children_list, children_link) { + wl_list_remove(&child->children_link); + child->parent = NULL; + } wl_list_remove(&shsurf->link); free(shsurf); -- 2.7.4