[mutter] wayland/subsurface: Handle node unlinking on parent destroyed



commit f41696b0fc96227ab82c2f417198353fe11922e6
Author: Robert Mader <robert mader posteo de>
Date:   Fri Aug 6 13:10:52 2021 +0200

    wayland/subsurface: Handle node unlinking on parent destroyed
    
    It concerns subsurface state and the subsurface already listenes
    for the parent to get destroyed.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1958>

 src/wayland/meta-wayland-subsurface.c |  1 +
 src/wayland/meta-wayland-surface.c    | 16 +---------------
 2 files changed, 2 insertions(+), 15 deletions(-)
---
diff --git a/src/wayland/meta-wayland-subsurface.c b/src/wayland/meta-wayland-subsurface.c
index 9f32094766..7e996f4d34 100644
--- a/src/wayland/meta-wayland-subsurface.c
+++ b/src/wayland/meta-wayland-subsurface.c
@@ -502,6 +502,7 @@ surface_handle_parent_surface_destroyed (struct wl_listener *listener,
                                                  surface,
                                                  sub.parent_destroy_listener);
 
+  g_node_unlink (surface->subsurface_branch_node);
   surface->sub.parent = NULL;
 }
 
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 872ee6c496..630c76c8aa 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -1415,13 +1415,6 @@ meta_wayland_surface_notify_unmapped (MetaWaylandSurface *surface)
   g_signal_emit (surface, surface_signals[SURFACE_UNMAPPED], 0);
 }
 
-static void
-unlink_note (GNode    *node,
-             gpointer  data)
-{
-  g_node_unlink (node);
-}
-
 static void
 wl_surface_destructor (struct wl_resource *resource)
 {
@@ -1474,14 +1467,7 @@ wl_surface_destructor (struct wl_resource *resource)
   if (surface->wl_subsurface)
     wl_resource_destroy (surface->wl_subsurface);
 
-  if (surface->subsurface_branch_node)
-    {
-      g_node_children_foreach (surface->subsurface_branch_node,
-                               G_TRAVERSE_NON_LEAVES,
-                               unlink_note,
-                               NULL);
-      g_clear_pointer (&surface->subsurface_branch_node, g_node_destroy);
-    }
+  g_clear_pointer (&surface->subsurface_branch_node, g_node_destroy);
 
   g_hash_table_destroy (surface->shortcut_inhibited_seats);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]