From 135ed27d272828bf89f4d80545186895e34fe88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 14 Oct 2022 18:24:46 +0200 Subject: [PATCH] clutter/frame: Allow setting a backend release function The one set by the native backend is empty, but it will be used later. Part-of: --- clutter/clutter/clutter-frame-clock.c | 2 +- clutter/clutter/clutter-frame-private.h | 10 +++++++--- clutter/clutter/clutter-frame.c | 10 ++++++++-- src/backends/native/meta-frame-native.c | 7 ++++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/clutter/clutter/clutter-frame-clock.c b/clutter/clutter/clutter-frame-clock.c index 7cde0140d..95f694eda 100644 --- a/clutter/clutter/clutter-frame-clock.c +++ b/clutter/clutter/clutter-frame-clock.c @@ -735,7 +735,7 @@ clutter_frame_clock_dispatch (ClutterFrameClock *frame_clock, if (iface->new_frame) frame = iface->new_frame (frame_clock, frame_clock->listener.user_data); if (!frame) - frame = clutter_frame_new (ClutterFrame); + frame = clutter_frame_new (ClutterFrame, NULL); frame->frame_count = frame_count; frame->has_target_presentation_time = frame_clock->is_next_presentation_time_valid; diff --git a/clutter/clutter/clutter-frame-private.h b/clutter/clutter/clutter-frame-private.h index 16c4f300c..41dc9b3b7 100644 --- a/clutter/clutter/clutter-frame-private.h +++ b/clutter/clutter/clutter-frame-private.h @@ -20,9 +20,12 @@ #include "clutter/clutter-frame.h" +typedef void (* ClutterFrameRelease) (ClutterFrame *frame); + struct _ClutterFrame { grefcount ref_count; + ClutterFrameRelease release; int64_t frame_count; @@ -34,10 +37,11 @@ struct _ClutterFrame }; CLUTTER_EXPORT -gpointer clutter_frame_new (size_t size); +gpointer clutter_frame_new (size_t size, + ClutterFrameRelease release); -#define clutter_frame_new(FrameType) \ - ((FrameType *) (clutter_frame_new (sizeof (FrameType)))) +#define clutter_frame_new(FrameType, release) \ + ((FrameType *) (clutter_frame_new (sizeof (FrameType), release))) ClutterFrameResult clutter_frame_get_result (ClutterFrame *frame); diff --git a/clutter/clutter/clutter-frame.c b/clutter/clutter/clutter-frame.c index 824cb59e2..98088d716 100644 --- a/clutter/clutter/clutter-frame.c +++ b/clutter/clutter/clutter-frame.c @@ -32,11 +32,16 @@ void clutter_frame_unref (ClutterFrame *frame) { if (g_ref_count_dec (&frame->ref_count)) - g_free (frame); + { + if (frame->release) + frame->release (frame); + g_free (frame); + } } gpointer -(clutter_frame_new) (size_t size) +(clutter_frame_new) (size_t size, + ClutterFrameRelease release) { ClutterFrame *frame; @@ -44,6 +49,7 @@ gpointer frame = g_malloc0 (size); g_ref_count_init (&frame->ref_count); + frame->release = release; return frame; } diff --git a/src/backends/native/meta-frame-native.c b/src/backends/native/meta-frame-native.c index 4c2549a8d..45351b70b 100644 --- a/src/backends/native/meta-frame-native.c +++ b/src/backends/native/meta-frame-native.c @@ -28,8 +28,13 @@ struct _MetaFrameNative ClutterFrame base; }; +static void +meta_frame_native_release (ClutterFrame *frame) +{ +} + MetaFrameNative * meta_frame_native_new (void) { - return clutter_frame_new (MetaFrameNative); + return clutter_frame_new (MetaFrameNative, meta_frame_native_release); }