diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-06-08 13:31:32 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-06-21 12:54:03 +0200 |
commit | 419ee6a4512ecae10a91c537a1a10bc11bfdc23e (patch) | |
tree | 2b016f79fc51b7479e0b6f9d1acf1e55ac4bc5ac /gtk/gtkentrycompletion.c | |
parent | 2c0d2d332f54156518ae9e1298aa714f1016564a (diff) | |
download | gtk+-419ee6a4512ecae10a91c537a1a10bc11bfdc23e.tar.gz |
gtkentrycompletion: Properly remove controller from entry
When disconnecting the GtkEntry from the GtkEntryCompletion, we
must remove the controller in order to avoid dangling callbacks.
Diffstat (limited to 'gtk/gtkentrycompletion.c')
-rw-r--r-- | gtk/gtkentrycompletion.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index ef25764fc1..af90772162 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -2448,9 +2448,10 @@ completion_insert_text_callback (GtkEntry *entry, static void connect_completion_signals (GtkEntryCompletion *completion) { + GtkEntryCompletionPrivate *priv = completion->priv; GtkEventController *controller; - controller = gtk_event_controller_key_new (); + controller = priv->entry_key_controller = gtk_event_controller_key_new (); g_signal_connect (controller, "key-pressed", G_CALLBACK (gtk_entry_completion_key_pressed), completion); g_signal_connect_swapped (controller, "focus-out", @@ -2504,6 +2505,9 @@ unset_accessible_relation (GtkWidget *window, static void disconnect_completion_signals (GtkEntryCompletion *completion) { + gtk_widget_remove_controller (completion->priv->entry, + completion->priv->entry_key_controller); + if (completion->priv->changed_id > 0 && g_signal_handler_is_connected (completion->priv->entry, completion->priv->changed_id)) |