gtkfontchooser: Use GtkEventControllerKey
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 6 Jun 2018 22:49:04 +0000 (00:49 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 21 Jun 2018 10:50:57 +0000 (12:50 +0200)
Use an event controller on GtkFontChooserDialog, a nice side effect
is that we can use gtk_event_controller_key_forward() and
gtk_search_entry_set_key_capture_widget() instead of passing events
around for dialog search.

gtk/gtkfontchooserdialog.c
gtk/gtkfontchooserwidget.c
gtk/gtkfontchooserwidgetprivate.h
gtk/ui/gtkfontchooserdialog.ui

index 0208040ef789f4e7ae4c2ad715ff806361d59c6c..2604b03dc0164bb33d5a8420ed99f2f1c40f6084 100644 (file)
@@ -39,6 +39,7 @@
 #include "gtktogglebutton.h"
 #include "gtkheaderbar.h"
 #include "gtkactionable.h"
+#include "gtkeventcontrollerkey.h"
 
 struct _GtkFontChooserDialogPrivate
 {
@@ -124,21 +125,15 @@ font_activated_cb (GtkFontChooser *fontchooser,
 }
 
 static gboolean
-gtk_font_chooser_dialog_event (GtkWidget *dialog,
-                               GdkEvent  *event)
+dialog_forward_key (GtkEventControllerKey *controller,
+                    guint                  keyval,
+                    guint                  keycode,
+                    GdkModifierType        modifiers,
+                    GtkWidget             *widget)
 {
-  GtkFontChooserDialog *fdialog = GTK_FONT_CHOOSER_DIALOG (dialog);
-  gboolean handled = FALSE;
+  GtkFontChooserDialog *fdialog = GTK_FONT_CHOOSER_DIALOG (widget);
 
-  if (gdk_event_get_event_type (event) != GDK_KEY_PRESS)
-    return GDK_EVENT_PROPAGATE;
-
-  handled = GTK_WIDGET_CLASS (gtk_font_chooser_dialog_parent_class)->event (dialog, event);
-
-  if (!handled)
-    handled = gtk_font_chooser_widget_handle_event (fdialog->priv->fontchooser, (GdkEventKey *)event);
-
-  return handled;
+  return gtk_event_controller_key_forward (controller, fdialog->priv->fontchooser);
 }
 
 static void
@@ -208,7 +203,6 @@ gtk_font_chooser_dialog_class_init (GtkFontChooserDialogClass *klass)
   gobject_class->get_property = gtk_font_chooser_dialog_get_property;
   gobject_class->set_property = gtk_font_chooser_dialog_set_property;
 
-  widget_class->event = gtk_font_chooser_dialog_event;
   widget_class->map = gtk_font_chooser_dialog_map;
 
   _gtk_font_chooser_install_properties (gobject_class);
@@ -222,6 +216,7 @@ gtk_font_chooser_dialog_class_init (GtkFontChooserDialogClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserDialog, select_button);
   gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserDialog, cancel_button);
   gtk_widget_class_bind_template_callback (widget_class, font_activated_cb);
+  gtk_widget_class_bind_template_callback (widget_class, dialog_forward_key);
 }
 
 static void
index 6b161f084ca090992e5db749f4c57a32757c4dc1..442bc815405a8d290016ff27bc5b247a4d7d75c1 100644 (file)
@@ -881,6 +881,9 @@ gtk_font_chooser_widget_init (GtkFontChooserWidget *fontchooser)
 
   gtk_font_chooser_widget_set_cell_size (fontchooser);
   gtk_font_chooser_widget_take_font_desc (fontchooser, NULL);
+
+  gtk_search_entry_set_key_capture_widget (GTK_SEARCH_ENTRY (priv->search_entry),
+                                           GTK_WIDGET (fontchooser));
 }
 
 /**
@@ -2520,17 +2523,6 @@ gtk_font_chooser_widget_iface_init (GtkFontChooserIface *iface)
   iface->get_font_map = gtk_font_chooser_widget_get_font_map;
 }
 
-gboolean
-gtk_font_chooser_widget_handle_event (GtkWidget   *widget,
-                                      GdkEventKey *key_event)
-{
-  GtkFontChooserWidget *fontchooser = GTK_FONT_CHOOSER_WIDGET (widget);
-  GtkFontChooserWidgetPrivate *priv = fontchooser->priv;
-  GdkEvent *event = (GdkEvent *)key_event;
-
-  return gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), event);
-}
-
 GAction *
 gtk_font_chooser_widget_get_tweak_action (GtkWidget *widget)
 {
index 5abdc5e47b9dde0477edc10445b4580ab34e9ff1..1a7dd743ec5eb935b9487ff2c31cca6fe9d0a9ae 100644 (file)
@@ -22,9 +22,6 @@
 
 G_BEGIN_DECLS
 
-gboolean gtk_font_chooser_widget_handle_event (GtkWidget   *widget,
-                                               GdkEventKey *event);
-
 GAction *gtk_font_chooser_widget_get_tweak_action (GtkWidget *fontchooser);
 
 G_END_DECLS
index c3b2882be304f990522c2593c8129b2147bdf3fe..e6fb4ec3a67d616d67ca27af57bf2aaabbc4b7f2 100644 (file)
         <property name="can-default">1</property>
       </object>
     </child>
+    <child>
+      <object class="GtkEventControllerKey">
+        <signal name="key-pressed" handler="dialog_forward_key" swapped="no"/>
+        <signal name="key-released" handler="dialog_forward_key" swapped="no"/>
+      </object>
+    </child>
     <action-widgets>
       <action-widget response="cancel">cancel_button</action-widget>
       <action-widget response="ok" default="true">select_button</action-widget>