[gtk+/wip/matthiasc/kill-key-events2: 33/48] gtk-demo: Stop using ::key-press-event in font explorer



commit 542889180634f941ad85370503777518679ca2dc
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jan 31 12:42:43 2018 +0100

    gtk-demo: Stop using ::key-press-event in font explorer
    
    Use a key controller instead. Note that this currently
    breaks the handling of Enter, since we activate key bindings
    twice, causing us to switch to the label and back.

 demos/gtk-demo/font-features.ui |    1 -
 demos/gtk-demo/font_features.c  |   16 ++++++++++------
 demos/gtk-demo/hypertext.c      |   18 ++++++++++--------
 demos/gtk-demo/search_entry2.c  |    8 +++++---
 4 files changed, 25 insertions(+), 18 deletions(-)
---
diff --git a/demos/gtk-demo/font-features.ui b/demos/gtk-demo/font-features.ui
index 2cc89c9..c341233 100644
--- a/demos/gtk-demo/font-features.ui
+++ b/demos/gtk-demo/font-features.ui
@@ -132,7 +132,6 @@
 Разъяренный чтец эгоистично бьёт пятью жердями шустрого фехтовальщика. Наш банк вчера же выплатил Ф.Я. 
Эйхгольду комиссию за ценные вещи. Эх, чужак, общий съём цен шляп (юфть) – вдрызг! В чащах юга жил бы цитрус? 
Да, но фальшивый экземпляр!
 
 Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός</property>
-                    <signal name="key-press-event" handler="entry_key_press"/>
                     <signal name="activate" handler="stop_edit"/>
                     <property name="valign">start</property>
                     <property name="width-chars">50</property>
diff --git a/demos/gtk-demo/font_features.c b/demos/gtk-demo/font_features.c
index a2df188..32d801d 100644
--- a/demos/gtk-demo/font_features.c
+++ b/demos/gtk-demo/font_features.c
@@ -1669,12 +1669,12 @@ stop_edit (void)
 }
 
 static gboolean
-entry_key_press (GtkEntry *entry, GdkEventKey *event)
+entry_key_press (GtkEventController *controller,
+                 guint               keyval,
+                 guint               keycode,
+                 GdkModifierType     modifiers,
+                 GtkEntry           *entry)
 {
-  guint keyval;
-
-  gdk_event_get_keyval ((GdkEvent *)event, &keyval);
-
   if (keyval == GDK_KEY_Escape)
     {
       gtk_entry_set_text (GTK_ENTRY (entry), text);
@@ -1694,6 +1694,7 @@ do_font_features (GtkWidget *do_widget)
     {
       GtkBuilder *builder;
       GtkWidget *feature_list;
+      GtkEventController *controller;
 
       builder = gtk_builder_new_from_resource ("/font_features/font-features.ui");
 
@@ -1703,7 +1704,6 @@ do_font_features (GtkWidget *do_widget)
       gtk_builder_add_callback_symbol (builder, "reset", reset_features);
       gtk_builder_add_callback_symbol (builder, "stop_edit", G_CALLBACK (stop_edit));
       gtk_builder_add_callback_symbol (builder, "toggle_edit", G_CALLBACK (toggle_edit));
-      gtk_builder_add_callback_symbol (builder, "entry_key_press", G_CALLBACK (entry_key_press));
       gtk_builder_connect_signals (builder, NULL);
 
       window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
@@ -1718,6 +1718,10 @@ do_font_features (GtkWidget *do_widget)
       entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry"));
       edit_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "edit_toggle"));
 
+      controller = gtk_event_controller_key_new (entry);
+      g_object_set_data_full (G_OBJECT (entry), "controller", controller, g_object_unref);
+      g_signal_connect (controller, "key-pressed", G_CALLBACK (entry_key_press), entry);
+
       add_check_group (feature_list, _("Kerning"), (const char *[]){ "kern", NULL });
       add_check_group (feature_list, _("Ligatures"), (const char *[]){ "liga",
                                                                        "dlig",
diff --git a/demos/gtk-demo/hypertext.c b/demos/gtk-demo/hypertext.c
index bf06118..0716b27 100644
--- a/demos/gtk-demo/hypertext.c
+++ b/demos/gtk-demo/hypertext.c
@@ -105,14 +105,14 @@ follow_if_link (GtkWidget   *text_view,
 /* Links can be activated by pressing Enter.
  */
 static gboolean
-key_press_event (GtkWidget *text_view,
-                 GdkEventKey *event)
+key_pressed (GtkEventController *controller,
+             guint               keyval,
+             guint               keycode,
+             GdkModifierType     modifiers,
+             GtkWidget          *text_view)
 {
   GtkTextIter iter;
   GtkTextBuffer *buffer;
-  guint keyval;
-
-  gdk_event_get_keyval ((GdkEvent *)event, &keyval);
 
   switch (keyval)
     {
@@ -128,7 +128,7 @@ key_press_event (GtkWidget *text_view,
         break;
     }
 
-  return FALSE;
+  return GDK_EVENT_PROPAGATE;
 }
 
 static void set_cursor_if_appropriate (GtkTextView *text_view,
@@ -241,6 +241,7 @@ do_hypertext (GtkWidget *do_widget)
       GtkWidget *view;
       GtkWidget *sw;
       GtkTextBuffer *buffer;
+      GtkEventController *controller;
 
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (window), "Hypertext");
@@ -255,8 +256,9 @@ do_hypertext (GtkWidget *do_widget)
       gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
       gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 20);
       gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 20);
-      g_signal_connect (view, "key-press-event",
-                        G_CALLBACK (key_press_event), NULL);
+      controller = gtk_event_controller_key_new (view);
+      g_object_set_data_full (G_OBJECT (view), "controller", controller, g_object_unref);
+      g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), view);
       g_signal_connect (view, "event",
                         G_CALLBACK (event_cb), NULL);
 
diff --git a/demos/gtk-demo/search_entry2.c b/demos/gtk-demo/search_entry2.c
index 29080a0..dceb051 100644
--- a/demos/gtk-demo/search_entry2.c
+++ b/demos/gtk-demo/search_entry2.c
@@ -31,7 +31,10 @@ window_key_press_event_cb (GtkWidget    *widget,
                           GdkEvent     *event,
                           GtkSearchBar *bar)
 {
-  return gtk_search_bar_handle_event (bar, event);
+  if (gdk_event_get_event_type (event) == GDK_KEY_PRESS)
+    return gtk_search_bar_handle_event (bar, event);
+
+  return GDK_EVENT_PROPAGATE;
 }
 
 static void
@@ -99,8 +102,7 @@ do_search_entry2 (GtkWidget *do_widget)
       gtk_box_pack_start (GTK_BOX (vbox), searchbar);
 
       /* Hook the search bar to key presses */
-      g_signal_connect (window, "key-press-event",
-                        G_CALLBACK (window_key_press_event_cb), searchbar);
+      g_signal_connect (window, "event", G_CALLBACK (window_key_press_event_cb), searchbar);
 
       /* Help */
       label = gtk_label_new ("Start Typing to search");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]