diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-03-06 17:53:53 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-04-05 19:26:54 +0200 |
commit | 80c3ebe3a08ca9ecdb0cdb6b561281a278774536 (patch) | |
tree | 9edb21987e4e4ec3bf4e381337ac77036b81ac8b | |
parent | 585aafc2df9061dfb1f2b1c2b0c1a2d60eb54888 (diff) | |
download | gtk+-80c3ebe3a08ca9ecdb0cdb6b561281a278774536.tar.gz |
gtkentrycompletion: Stop using ::key-press-event
Use GtkEventControllerKey for the task
-rw-r--r-- | gtk/gtkentrycompletion.c | 24 | ||||
-rw-r--r-- | gtk/gtkentryprivate.h | 3 |
2 files changed, 17 insertions, 10 deletions
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index f9571b9ccb..f5b470d645 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -2060,16 +2060,17 @@ keyval_is_cursor_move (guint keyval) } static gboolean -gtk_entry_completion_key_press (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data) +gtk_entry_completion_key_pressed (GtkEventControllerKey *controller, + guint keyval, + guint keycode, + GdkModifierType state, + gpointer user_data) { gint matches, actions = 0; GtkEntryCompletion *completion = GTK_ENTRY_COMPLETION (user_data); - guint keyval; + GtkWidget *widget = completion->priv->entry; - if (!completion->priv->popup_completion || - !gdk_event_get_keyval ((GdkEvent *) event, &keyval)) + if (!completion->priv->popup_completion) return FALSE; if (keyval == GDK_KEY_Return || @@ -2470,11 +2471,14 @@ maybe_accept_completion (GtkEntry *entry, static void connect_completion_signals (GtkEntryCompletion *completion) { + completion->priv->entry_key_controller = + gtk_event_controller_key_new (completion->priv->entry); + g_signal_connect (completion->priv->entry_key_controller, "key-pressed", + G_CALLBACK (gtk_entry_completion_key_pressed), completion); + completion->priv->changed_id = g_signal_connect (completion->priv->entry, "changed", G_CALLBACK (gtk_entry_completion_changed), completion); - g_signal_connect (completion->priv->entry, "key-press-event", - G_CALLBACK (gtk_entry_completion_key_press), completion); completion->priv->insert_text_id = g_signal_connect (completion->priv->entry, "insert-text", @@ -2520,6 +2524,8 @@ unset_accessible_relation (GtkWidget *window, static void disconnect_completion_signals (GtkEntryCompletion *completion) { + g_clear_object (&completion->priv->entry_key_controller); + if (completion->priv->changed_id > 0 && g_signal_handler_is_connected (completion->priv->entry, completion->priv->changed_id)) @@ -2528,8 +2534,6 @@ disconnect_completion_signals (GtkEntryCompletion *completion) completion->priv->changed_id); completion->priv->changed_id = 0; } - g_signal_handlers_disconnect_by_func (completion->priv->entry, - G_CALLBACK (gtk_entry_completion_key_press), completion); if (completion->priv->insert_text_id > 0 && g_signal_handler_is_connected (completion->priv->entry, completion->priv->insert_text_id)) diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h index 0d1e8494e7..83d9715b77 100644 --- a/gtk/gtkentryprivate.h +++ b/gtk/gtkentryprivate.h @@ -25,6 +25,7 @@ #include "gtkliststore.h" #include "gtktreemodelfilter.h" #include "gtktreeviewcolumn.h" +#include "gtkeventcontrollerkey.h" G_BEGIN_DECLS @@ -47,6 +48,8 @@ struct _GtkEntryCompletionPrivate gchar *case_normalized_key; + GtkEventController *entry_key_controller; + /* only used by GtkEntry when attached: */ GtkWidget *popup_window; GtkWidget *vbox; |