From 176fd2fab3e6c09ae0039c0f8715248204358768 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 8 Jun 2018 13:50:26 +0200 Subject: [PATCH] gtkemojicompletion: Use GtkEntry key controller to handle key presses --- gtk/gtkemojicompletion.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/gtk/gtkemojicompletion.c b/gtk/gtkemojicompletion.c index 62e2b5774f..e7583126d9 100644 --- a/gtk/gtkemojicompletion.c +++ b/gtk/gtkemojicompletion.c @@ -300,20 +300,15 @@ move_active_variation (GtkEmojiCompletion *completion, } static gboolean -entry_key_press (GtkEntry *entry, - GdkEvent *event, - GtkEmojiCompletion *completion) +entry_key_press (GtkEventControllerKey *key, + guint keyval, + guint keycode, + GdkModifierType modifiers, + GtkEmojiCompletion *completion) { - guint keyval; - - if (gdk_event_get_event_type (event) != GDK_KEY_PRESS) - return FALSE; - if (!gtk_widget_get_visible (GTK_WIDGET (completion))) return FALSE; - gdk_event_get_keyval ((GdkEvent*)event, &keyval); - if (keyval == GDK_KEY_Escape) { gtk_popover_popdown (GTK_POPOVER (completion)); @@ -386,21 +381,28 @@ static void connect_signals (GtkEmojiCompletion *completion, GtkEntry *entry) { - completion->entry = entry; + GtkEventController *key_controller; + + completion->entry = g_object_ref (entry); + key_controller = gtk_entry_get_key_controller (entry); completion->changed_id = g_signal_connect (entry, "changed", G_CALLBACK (entry_changed), completion); - g_signal_connect (entry, "event", G_CALLBACK (entry_key_press), completion); + g_signal_connect (key_controller, "key-pressed", G_CALLBACK (entry_key_press), completion); g_signal_connect (entry, "notify::has-focus", G_CALLBACK (entry_focus_out), completion); } static void disconnect_signals (GtkEmojiCompletion *completion) { + GtkEventController *key_controller; + + key_controller = gtk_entry_get_key_controller (completion->entry); + g_signal_handlers_disconnect_by_func (completion->entry, entry_changed, completion); - g_signal_handlers_disconnect_by_func (completion->entry, entry_key_press, completion); + g_signal_handlers_disconnect_by_func (key_controller, entry_key_press, completion); g_signal_handlers_disconnect_by_func (completion->entry, entry_focus_out, completion); - completion->entry = NULL; + g_clear_object (&completion->entry); } static gboolean -- 2.30.2