[libadwaita/wip/exalm/animation-cleanup: 4/10] animation-target: Add destroy notify to callback target
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/exalm/animation-cleanup: 4/10] animation-target: Add destroy notify to callback target
- Date: Thu, 18 Nov 2021 13:56:48 +0000 (UTC)
commit a8a0fecc21e1403ce1f2a8ee5e5321ab654e87fa
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Nov 16 17:45:20 2021 +0500
animation-target: Add destroy notify to callback target
src/adw-animation-target-private.h | 3 ++-
src/adw-animation-target.c | 19 ++++++++++++++++++-
src/adw-animation.c | 2 +-
3 files changed, 21 insertions(+), 3 deletions(-)
---
diff --git a/src/adw-animation-target-private.h b/src/adw-animation-target-private.h
index 4f335e98..2f506a2b 100644
--- a/src/adw-animation-target-private.h
+++ b/src/adw-animation-target-private.h
@@ -33,6 +33,7 @@ typedef void (*AdwAnimationTargetFunc) (double value,
GDK_DECLARE_INTERNAL_TYPE (AdwCallbackAnimationTarget, adw_callback_animation_target, ADW,
CALLBACK_ANIMATION_TARGET, AdwAnimationTarget)
AdwAnimationTarget *adw_callback_animation_target_new (AdwAnimationTargetFunc callback,
- gpointer user_data);
+ gpointer user_data,
+ GDestroyNotify destroy);
G_END_DECLS
diff --git a/src/adw-animation-target.c b/src/adw-animation-target.c
index 4a9b0e13..8961396e 100644
--- a/src/adw-animation-target.c
+++ b/src/adw-animation-target.c
@@ -48,6 +48,7 @@ struct _AdwCallbackAnimationTarget
AdwAnimationTargetFunc callback;
gpointer user_data;
+ GDestroyNotify destroy_notify;
};
struct _AdwCallbackAnimationTargetClass
@@ -66,11 +67,25 @@ adw_callback_animation_target_set_value (AdwAnimationTarget *target,
self->callback (value, self->user_data);
}
+static void
+adw_callback_animation_finalize (GObject *object)
+{
+ AdwCallbackAnimationTarget *self = ADW_CALLBACK_ANIMATION_TARGET (object);
+
+ if (self->destroy_notify)
+ self->destroy_notify (self->user_data);
+
+ G_OBJECT_CLASS (adw_callback_animation_target_parent_class)->finalize (object);
+}
+
static void
adw_callback_animation_target_class_init (AdwCallbackAnimationTargetClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
AdwAnimationTargetClass *target_class = ADW_ANIMATION_TARGET_CLASS (klass);
+ object_class->finalize = adw_callback_animation_finalize;
+
target_class->set_value = adw_callback_animation_target_set_value;
}
@@ -81,7 +96,8 @@ adw_callback_animation_target_init (AdwCallbackAnimationTarget *self)
AdwAnimationTarget *
adw_callback_animation_target_new (AdwAnimationTargetFunc callback,
- gpointer user_data)
+ gpointer user_data,
+ GDestroyNotify destroy)
{
AdwCallbackAnimationTarget *self;
@@ -91,6 +107,7 @@ adw_callback_animation_target_new (AdwAnimationTargetFunc callback,
self->callback = callback;
self->user_data = user_data;
+ self->destroy_notify = destroy;
return ADW_ANIMATION_TARGET (self);
}
diff --git a/src/adw-animation.c b/src/adw-animation.c
index 90057cfb..a0618e3c 100644
--- a/src/adw-animation.c
+++ b/src/adw-animation.c
@@ -347,7 +347,7 @@ adw_animation_new (GtkWidget *widget,
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
g_return_val_if_fail (target_func != NULL, NULL);
- target = adw_callback_animation_target_new (target_func, user_data);
+ target = adw_callback_animation_target_new (target_func, user_data, NULL);
return g_object_new (ADW_TYPE_ANIMATION,
"widget", widget,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]