summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2018-01-31 12:42:43 +0100
committerMatthias Clasen <mclasen@redhat.com>2018-02-07 16:11:56 -0500
commit542889180634f941ad85370503777518679ca2dc (patch)
tree4aa632ff864f7204503172c790a5e7bcf328a20d
parent5068522fa831fde9ed4df3398e316006ade9c6de (diff)
downloadgtk+-542889180634f941ad85370503777518679ca2dc.tar.gz
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.
-rw-r--r--demos/gtk-demo/font-features.ui1
-rw-r--r--demos/gtk-demo/font_features.c16
-rw-r--r--demos/gtk-demo/hypertext.c18
-rw-r--r--demos/gtk-demo/search_entry2.c8
4 files changed, 25 insertions, 18 deletions
diff --git a/demos/gtk-demo/font-features.ui b/demos/gtk-demo/font-features.ui
index 2cc89c92bc..c341233526 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 a2df188a6a..32d801d71f 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 bf06118095..0716b2748d 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 29080a0375..dceb051674 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");