gtkemojicompletion: Use GtkEntry key controller to handle key presses
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 8 Jun 2018 11:50:26 +0000 (13:50 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 21 Jun 2018 10:54:03 +0000 (12:54 +0200)
gtk/gtkemojicompletion.c

index 62e2b5774f1e8fa359accdaee7e57d14d2d62cb2..e7583126d9a46e5c30641a13b5c1aec4dc61d6be 100644 (file)
@@ -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