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>
This commit is contained in:
Jonas Ådahl 2022-10-14 18:24:46 +02:00 committed by Robert Mader
parent 7b634df379
commit 135ed27d27
4 changed files with 22 additions and 7 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}