[gtk/wip/matthiasc/popup4: 53/79] surface: Simplify destroy implementation



commit ff47491fe174c3e75c163af628cd9d2d73059dd4
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Mar 24 16:24:30 2019 -0400

    surface: Simplify destroy implementation
    
    Without child surfaces, there is no need to recurse.

 gdk/broadway/gdksurface-broadway.c |  1 -
 gdk/gdksurface.c                   | 56 ++++++++++++++------------------------
 gdk/gdksurfaceimpl.h               |  6 ----
 gdk/wayland/gdksurface-wayland.c   |  1 -
 gdk/x11/gdksurface-x11.c           |  5 ++--
 5 files changed, 23 insertions(+), 46 deletions(-)
---
diff --git a/gdk/broadway/gdksurface-broadway.c b/gdk/broadway/gdksurface-broadway.c
index 4e054144b9..b01d4d5639 100644
--- a/gdk/broadway/gdksurface-broadway.c
+++ b/gdk/broadway/gdksurface-broadway.c
@@ -256,7 +256,6 @@ gdk_surface_broadway_ref_cairo_surface (GdkSurface *surface)
 
 static void
 _gdk_broadway_surface_destroy (GdkSurface *surface,
-                               gboolean   recursing,
                                gboolean   foreign_destroy)
 {
   GdkSurfaceImplBroadway *impl;
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 4fde6e7d4b..e0d3149821 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -602,8 +602,6 @@ surface_remove_from_pointer_info (GdkSurface  *surface,
 /**
  * _gdk_surface_destroy_hierarchy:
  * @surface: a #GdkSurface
- * @recursing: If %TRUE, then this is being called because a parent
- *            was destroyed.
  * @recursing_native: If %TRUE, then this is being called because a native parent
  *            was destroyed. This generally means that the call to the
  *            windowing system to destroy the surface can be omitted, since
@@ -619,8 +617,6 @@ surface_remove_from_pointer_info (GdkSurface  *surface,
  **/
 static void
 _gdk_surface_destroy_hierarchy (GdkSurface *surface,
-                                gboolean   recursing,
-                                gboolean   recursing_native,
                                 gboolean   foreign_destroy)
 {
   GdkSurfaceImplClass *impl_class;
@@ -633,42 +629,32 @@ _gdk_surface_destroy_hierarchy (GdkSurface *surface,
 
   display = gdk_surface_get_display (surface);
 
-  switch (surface->surface_type)
+  if (surface->gl_paint_context)
     {
-    default:
-      g_assert_not_reached ();
-      break;
-
-    case GDK_SURFACE_TOPLEVEL:
-    case GDK_SURFACE_TEMP:
-      if (surface->gl_paint_context)
-        {
-          /* Make sure to destroy if current */
-          g_object_run_dispose (G_OBJECT (surface->gl_paint_context));
-          g_object_unref (surface->gl_paint_context);
-          surface->gl_paint_context = NULL;
-        }
+      /* Make sure to destroy if current */
+      g_object_run_dispose (G_OBJECT (surface->gl_paint_context));
+      g_object_unref (surface->gl_paint_context);
+      surface->gl_paint_context = NULL;
+    }
 
-      if (surface->frame_clock)
-        {
-          g_object_run_dispose (G_OBJECT (surface->frame_clock));
-          gdk_surface_set_frame_clock (surface, NULL);
-        }
+  if (surface->frame_clock)
+    {
+      g_object_run_dispose (G_OBJECT (surface->frame_clock));
+      gdk_surface_set_frame_clock (surface, NULL);
+    }
 
-      _gdk_surface_clear_update_area (surface);
+  _gdk_surface_clear_update_area (surface);
 
-      impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl);
-      impl_class->destroy (surface, recursing_native, foreign_destroy);
+  impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl);
+  impl_class->destroy (surface, foreign_destroy);
 
-      surface->state |= GDK_SURFACE_STATE_WITHDRAWN;
-      surface->destroyed = TRUE;
+  surface->state |= GDK_SURFACE_STATE_WITHDRAWN;
+  surface->destroyed = TRUE;
 
-      surface_remove_from_pointer_info (surface, display);
+  surface_remove_from_pointer_info (surface, display);
 
-      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
-      g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
-      break;
-    }
+  g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
+  g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
 }
 
 /**
@@ -686,7 +672,7 @@ void
 _gdk_surface_destroy (GdkSurface *surface,
                       gboolean   foreign_destroy)
 {
-  _gdk_surface_destroy_hierarchy (surface, FALSE, FALSE, foreign_destroy);
+  _gdk_surface_destroy_hierarchy (surface, foreign_destroy);
 }
 
 /**
@@ -704,7 +690,7 @@ _gdk_surface_destroy (GdkSurface *surface,
 void
 gdk_surface_destroy (GdkSurface *surface)
 {
-  _gdk_surface_destroy_hierarchy (surface, FALSE, FALSE, FALSE);
+  _gdk_surface_destroy_hierarchy (surface, FALSE);
   g_object_unref (surface);
 }
 
diff --git a/gdk/gdksurfaceimpl.h b/gdk/gdksurfaceimpl.h
index c5bd90ae7c..4bae67e914 100644
--- a/gdk/gdksurfaceimpl.h
+++ b/gdk/gdksurfaceimpl.h
@@ -100,18 +100,12 @@ struct _GdkSurfaceImplClass
 /* Called to do the windowing system specific part of gdk_surface_destroy(),
  *
  * surface: The window being destroyed
- * recursing: If TRUE, then this is being called because a parent
- *     was destroyed. This generally means that the call to the windowing
- *     system to destroy the surface can be omitted, since it will be
- *     destroyed as a result of the parent being destroyed.
- *     Unless @foreign_destroy
  * foreign_destroy: If TRUE, the surface or a parent was destroyed by some
  *     external agency. The surface has already been destroyed and no
  *     windowing system calls should be made. (This may never happen
  *     for some windowing systems.)
  */
   void         (* destroy)              (GdkSurface       *surface,
-                                         gboolean         recursing,
                                          gboolean         foreign_destroy);
 
 
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 887016176d..6cfa7a8876 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -2841,7 +2841,6 @@ gdk_surface_wayland_input_shape_combine_region (GdkSurface           *surface,
 
 static void
 gdk_wayland_surface_destroy (GdkSurface *surface,
-                             gboolean    recursing,
                              gboolean    foreign_destroy)
 {
   GdkWaylandDisplay *display;
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index a2c82fc532..2fa822f6a8 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -992,8 +992,7 @@ gdk_toplevel_x11_free_contents (GdkDisplay *display,
 
 static void
 gdk_x11_surface_destroy (GdkSurface *surface,
-                        gboolean   recursing,
-                        gboolean   foreign_destroy)
+                         gboolean    foreign_destroy)
 {
   GdkSurfaceImplX11 *impl = GDK_SURFACE_IMPL_X11 (surface->impl);
   GdkToplevelX11 *toplevel;
@@ -1013,7 +1012,7 @@ gdk_x11_surface_destroy (GdkSurface *surface,
       impl->cairo_surface = NULL;
     }
 
-  if (!recursing && !foreign_destroy)
+  if (!foreign_destroy)
     XDestroyWindow (GDK_SURFACE_XDISPLAY (surface), GDK_SURFACE_XID (surface));
 }
 


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