summaryrefslogtreecommitdiff
path: root/gtk/gtkentrycompletion.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-06-08 13:31:32 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-06-21 12:54:03 +0200
commit419ee6a4512ecae10a91c537a1a10bc11bfdc23e (patch)
tree2b016f79fc51b7479e0b6f9d1acf1e55ac4bc5ac /gtk/gtkentrycompletion.c
parent2c0d2d332f54156518ae9e1298aa714f1016564a (diff)
downloadgtk+-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.c6
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))