summaryrefslogtreecommitdiff
path: root/gtk/gtkeventcontroller.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-03-11 06:47:04 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-03-11 06:47:04 -0400
commit3b45be94e8a350c40039479f336539ec65764193 (patch)
treecc4e3e0f6ffcda2f8c09cd30f4de92263d38f359 /gtk/gtkeventcontroller.c
parentb4344861a09f7ec67fe5d302d9fdd00909daaaad (diff)
downloadgtk+-3b45be94e8a350c40039479f336539ec65764193.tar.gz
Gestures: Properly handle weak references
Every call to g_object_add_weak_pointer must be matched with a g_object_remove_weak_pointer call, or we will get invalid writes inside GObject. https://bugzilla.gnome.org/show_bug.cgi?id=746013
Diffstat (limited to 'gtk/gtkeventcontroller.c')
-rw-r--r--gtk/gtkeventcontroller.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gtk/gtkeventcontroller.c b/gtk/gtkeventcontroller.c
index 4a3e3017bc..a5cfde1e3e 100644
--- a/gtk/gtkeventcontroller.c
+++ b/gtk/gtkeventcontroller.c
@@ -131,7 +131,11 @@ gtk_event_controller_dispose (GObject *object)
priv = gtk_event_controller_get_instance_private (controller);
if (priv->widget)
- _gtk_widget_remove_controller (priv->widget, controller);
+ {
+ _gtk_widget_remove_controller (priv->widget, controller);
+ g_object_remove_weak_pointer (G_OBJECT (priv->widget), (gpointer *) &priv->widget);
+ priv->widget = NULL;
+ }
G_OBJECT_CLASS (gtk_event_controller_parent_class)->dispose (object);
}