summaryrefslogtreecommitdiff
path: root/src/nautilus-query-editor.c
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniof@gnome.org>2021-08-08 16:18:01 +0100
committerAntónio Fernandes <antoniojpfernandes@gmail.com>2021-12-22 01:38:47 +0000
commit41ee24721ef2ccfeca877e2e3801c37e602660c0 (patch)
treeeb89345fc04db98b5a5b22bc466f9b0d81633f15 /src/nautilus-query-editor.c
parent522e3911af6c1ec2bdcb673f4fb04d1241ce399a (diff)
downloadnautilus-41ee24721ef2ccfeca877e2e3801c37e602660c0.tar.gz
query-editor: Drop gtk_search_entry_handle_event()
It's going away in GTK4. Also, as we use a key event controller now, we can use gtk_event_controller_key_forward() instead. This is how GTK4 implements gtk_search_entry_set_key_capture_widget(), so reimplement it here. We were not going to inherit anyway, because we need a custom widget for a tagged entry in GTK4.
Diffstat (limited to 'src/nautilus-query-editor.c')
-rw-r--r--src/nautilus-query-editor.c42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index 05d2565bd..ff9934b22 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -745,12 +745,46 @@ nautilus_query_editor_set_text (NautilusQueryEditor *self,
gtk_entry_set_text (GTK_ENTRY (self->entry), text);
}
+static gboolean
+nautilus_gtk_search_entry_is_keynav_event (guint keyval,
+ GdkModifierType state)
+{
+ if (keyval == GDK_KEY_Tab || keyval == GDK_KEY_KP_Tab ||
+ keyval == GDK_KEY_Up || keyval == GDK_KEY_KP_Up ||
+ keyval == GDK_KEY_Down || keyval == GDK_KEY_KP_Down ||
+ keyval == GDK_KEY_Left || keyval == GDK_KEY_KP_Left ||
+ keyval == GDK_KEY_Right || keyval == GDK_KEY_KP_Right ||
+ keyval == GDK_KEY_Home || keyval == GDK_KEY_KP_Home ||
+ keyval == GDK_KEY_End || keyval == GDK_KEY_KP_End ||
+ keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_KP_Page_Up ||
+ keyval == GDK_KEY_Page_Down || keyval == GDK_KEY_KP_Page_Down ||
+ ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0))
+ {
+ return TRUE;
+ }
+
+ /* Other navigation events should get automatically
+ * ignored as they will not change the content of the entry
+ */
+ return FALSE;
+}
+
gboolean
-nautilus_query_editor_handle_event (NautilusQueryEditor *self,
- GdkEvent *event)
+nautilus_query_editor_handle_event (NautilusQueryEditor *self,
+ GtkEventControllerKey *controller,
+ guint keyval,
+ GdkModifierType state)
{
g_return_val_if_fail (NAUTILUS_IS_QUERY_EDITOR (self), GDK_EVENT_PROPAGATE);
- g_return_val_if_fail (event != NULL, GDK_EVENT_PROPAGATE);
+ g_return_val_if_fail (controller != NULL, GDK_EVENT_PROPAGATE);
+
+ /* Conditions are copied straight from GTK. */
+ if (nautilus_gtk_search_entry_is_keynav_event (keyval, state) ||
+ keyval == GDK_KEY_space ||
+ keyval == GDK_KEY_Menu)
+ {
+ return GDK_EVENT_PROPAGATE;
+ }
- return gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (self->entry), event);
+ return gtk_event_controller_key_forward (controller, GTK_WIDGET (self->entry));
}