[libadwaita/wip/exalm/animation-cleanup: 4/10] animation-target: Add destroy notify to callback target




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]