[mutter] stage-view: Add clutter_stage_view_destroy()



commit fb0f03640a4fdc8bedaf6f64fd1781207b9d975c
Author: Jonas Ådahl <jadahl gmail com>
Date:   Wed Aug 12 15:28:34 2020 +0200

    stage-view: Add clutter_stage_view_destroy()
    
    This aims to make sure a view and its resources are destroyed when it
    should. Using references might keep certain components (e.g frame clock)
    alive for too long.
    
    We currently don't take any long lived references to the stage view
    anywhere, so this doesn't matter in practice, but this may change, and
    will be used by a to be added test case.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1404

 clutter/clutter/clutter-stage-view.c      | 7 +++++++
 clutter/clutter/clutter-stage-view.h      | 3 +++
 clutter/clutter/cogl/clutter-stage-cogl.c | 8 ++++----
 src/backends/meta-renderer.c              | 2 +-
 4 files changed, 15 insertions(+), 5 deletions(-)
---
diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c
index 9e19055d65..d02b92909f 100644
--- a/clutter/clutter/clutter-stage-view.c
+++ b/clutter/clutter/clutter-stage-view.c
@@ -86,6 +86,13 @@ typedef struct _ClutterStageViewPrivate
 
 G_DEFINE_TYPE_WITH_PRIVATE (ClutterStageView, clutter_stage_view, G_TYPE_OBJECT)
 
+void
+clutter_stage_view_destroy (ClutterStageView *view)
+{
+  g_object_run_dispose (G_OBJECT (view));
+  g_object_unref (view);
+}
+
 void
 clutter_stage_view_get_layout (ClutterStageView      *view,
                                cairo_rectangle_int_t *rect)
diff --git a/clutter/clutter/clutter-stage-view.h b/clutter/clutter/clutter-stage-view.h
index ff1963c5d4..38b2aa0016 100644
--- a/clutter/clutter/clutter-stage-view.h
+++ b/clutter/clutter/clutter-stage-view.h
@@ -52,6 +52,9 @@ struct _ClutterStageViewClass
                                        cairo_rectangle_int_t       *dst_rect);
 };
 
+CLUTTER_EXPORT
+void clutter_stage_view_destroy (ClutterStageView *view);
+
 CLUTTER_EXPORT
 void clutter_stage_view_get_layout (ClutterStageView      *view,
                                     cairo_rectangle_int_t *rect);
diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c
index 695c594bb4..4b07a40575 100644
--- a/clutter/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/clutter/cogl/clutter-stage-cogl.c
@@ -773,16 +773,16 @@ on_framebuffer_set (ClutterStageView *view)
 }
 
 static void
-clutter_stage_view_cogl_finalize (GObject *object)
+clutter_stage_view_cogl_dispose (GObject *object)
 {
   ClutterStageViewCogl *view_cogl = CLUTTER_STAGE_VIEW_COGL (object);
   ClutterStageViewCoglPrivate *view_priv =
     clutter_stage_view_cogl_get_instance_private (view_cogl);
 
   g_clear_handle_id (&view_priv->notify_presented_handle_id, g_source_remove);
-  clutter_damage_history_free (view_priv->damage_history);
+  g_clear_pointer (&view_priv->damage_history, clutter_damage_history_free);
 
-  G_OBJECT_CLASS (clutter_stage_view_cogl_parent_class)->finalize (object);
+  G_OBJECT_CLASS (clutter_stage_view_cogl_parent_class)->dispose (object);
 }
 
 static void
@@ -802,5 +802,5 @@ clutter_stage_view_cogl_class_init (ClutterStageViewCoglClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->finalize = clutter_stage_view_cogl_finalize;
+  object_class->dispose = clutter_stage_view_cogl_dispose;
 }
diff --git a/src/backends/meta-renderer.c b/src/backends/meta-renderer.c
index c0bbb61336..27ea7c38af 100644
--- a/src/backends/meta-renderer.c
+++ b/src/backends/meta-renderer.c
@@ -143,7 +143,7 @@ meta_renderer_real_rebuild_views (MetaRenderer *renderer)
     meta_backend_get_monitor_manager (backend);
   GList *logical_monitors, *l;
 
-  g_list_free_full (priv->views, g_object_unref);
+  g_list_free_full (priv->views, (GDestroyNotify) clutter_stage_view_destroy);
   priv->views = NULL;
 
   logical_monitors =


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