summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ã…dahl <jadahl@gmail.com>2022-10-14 18:24:46 +0200
committerRobert Mader <robert.mader@collabora.com>2023-03-02 01:39:16 +0100
commit135ed27d272828bf89f4d80545186895e34fe88d (patch)
tree048ceac0c30421c2b7aeaf4d0e71aebd40ec8b2c
parent7b634df37980b6b2dd624b51932663ba363776e0 (diff)
downloadmutter-135ed27d272828bf89f4d80545186895e34fe88d.tar.gz
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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
-rw-r--r--clutter/clutter/clutter-frame-clock.c2
-rw-r--r--clutter/clutter/clutter-frame-private.h10
-rw-r--r--clutter/clutter/clutter-frame.c10
-rw-r--r--src/backends/native/meta-frame-native.c7
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);
}