[libhandy/wip/exalm/alpha-fixes: 4/8] swipe-tracker: Make swipeable a weak ref
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy/wip/exalm/alpha-fixes: 4/8] swipe-tracker: Make swipeable a weak ref
- Date: Thu, 11 Nov 2021 19:53:18 +0000 (UTC)
commit d2db1dfa457deaa92f721d78856a9e32eab573e7
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Fri Nov 12 00:35:55 2021 +0500
swipe-tracker: Make swipeable a weak ref
Fix a refcycle between the widget and the swipe tracker.
Backported from
https://gitlab.gnome.org/GNOME/libadwaita/-/commit/2821a1063e332d00b9b2fc00ba28e5d1c754645f
src/hdy-swipe-tracker.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
---
diff --git a/src/hdy-swipe-tracker.c b/src/hdy-swipe-tracker.c
index e98d63b2..03b41781 100644
--- a/src/hdy-swipe-tracker.c
+++ b/src/hdy-swipe-tracker.c
@@ -117,6 +117,24 @@ enum {
static guint signals[SIGNAL_LAST_SIGNAL];
+static void
+set_swipeable (HdySwipeTracker *self,
+ HdySwipeable *swipeable)
+{
+ if (self->swipeable == swipeable)
+ return;
+
+ if (self->swipeable)
+ g_object_remove_weak_pointer (G_OBJECT (self->swipeable),
+ (gpointer *) &self->swipeable);
+
+ self->swipeable = swipeable;
+
+ if (self->swipeable)
+ g_object_add_weak_pointer (G_OBJECT (self->swipeable),
+ (gpointer *) &self->swipeable);
+}
+
static gboolean
get_widget_coordinates (HdySwipeTracker *self,
GdkEvent *event,
@@ -936,7 +954,7 @@ hdy_swipe_tracker_dispose (GObject *object)
g_clear_pointer (&self->event_history, g_array_unref);
g_clear_object (&self->touch_gesture);
- g_clear_object (&self->swipeable);
+ set_swipeable (self, NULL);
G_OBJECT_CLASS (hdy_swipe_tracker_parent_class)->dispose (object);
}
@@ -989,7 +1007,7 @@ hdy_swipe_tracker_set_property (GObject *object,
switch (prop_id) {
case PROP_SWIPEABLE:
- self->swipeable = HDY_SWIPEABLE (g_object_ref (g_value_get_object (value)));
+ set_swipeable (self, g_value_get_object (value));
break;
case PROP_ENABLED:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]