[mutter] stage-view: Add clutter_stage_view_destroy()
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] stage-view: Add clutter_stage_view_destroy()
- Date: Thu, 13 Aug 2020 06:41:30 +0000 (UTC)
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]