[nautilus/wip/antoniof/gtk4-preparation-step-event-controllers: 1/5] query-editor: Drop gtk_search_entry_handle_event()
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/antoniof/gtk4-preparation-step-event-controllers: 1/5] query-editor: Drop gtk_search_entry_handle_event()
- Date: Fri, 12 Nov 2021 21:56:13 +0000 (UTC)
commit 17ca4838d3ef85f401f5c828c38bd6dbf23f6386
Author: António Fernandes <antoniof gnome org>
Date: Sun Aug 8 16:18:01 2021 +0100
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.
src/nautilus-query-editor.c | 42 ++++++++++++++++++++++++++++++++++++++----
src/nautilus-query-editor.h | 6 ++++--
src/nautilus-window-slot.c | 28 +++++++++++-----------------
src/nautilus-window-slot.h | 6 ++++--
src/nautilus-window.c | 4 +---
5 files changed, 58 insertions(+), 28 deletions(-)
---
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index 1eb074927..58aa2be5b 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -744,12 +744,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));
}
diff --git a/src/nautilus-query-editor.h b/src/nautilus-query-editor.h
index c09de18a0..ec9db128e 100644
--- a/src/nautilus-query-editor.h
+++ b/src/nautilus-query-editor.h
@@ -73,5 +73,7 @@ void nautilus_query_editor_set_text (NautilusQueryEditor *editor,
const gchar *text);
gboolean
-nautilus_query_editor_handle_event (NautilusQueryEditor *self,
- GdkEvent *event);
+nautilus_query_editor_handle_event (NautilusQueryEditor *self,
+ GtkEventControllerKey *controller,
+ guint keyval,
+ GdkModifierType state);
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 8d6a4cde3..2a1c79e40 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -607,34 +607,25 @@ nautilus_window_slot_search (NautilusWindowSlot *self,
}
gboolean
-nautilus_window_slot_handle_event (NautilusWindowSlot *self,
- GdkEvent *event)
+nautilus_window_slot_handle_event (NautilusWindowSlot *self,
+ GtkEventControllerKey *controller,
+ guint keyval,
+ GdkModifierType state)
{
gboolean retval;
GAction *action;
- guint keyval;
retval = FALSE;
action = g_action_map_lookup_action (G_ACTION_MAP (self->slot_action_group),
"search-visible");
- if (gdk_event_get_event_type (event) != GDK_KEY_PRESS)
- {
- return GDK_EVENT_PROPAGATE;
- }
-
- if (G_UNLIKELY (!gdk_event_get_keyval (event, &keyval)))
- {
- g_return_val_if_reached (GDK_EVENT_PROPAGATE);
- }
-
if (keyval == GDK_KEY_Escape)
{
- g_autoptr (GVariant) state = NULL;
+ g_autoptr (GVariant) action_state = NULL;
- state = g_action_get_state (action);
+ action_state = g_action_get_state (action);
- if (g_variant_get_boolean (state))
+ if (g_variant_get_boolean (action_state))
{
nautilus_window_slot_set_search_visible (self, FALSE);
}
@@ -643,7 +634,10 @@ nautilus_window_slot_handle_event (NautilusWindowSlot *self,
/* If the action is not enabled, don't try to handle search */
if (g_action_get_enabled (action))
{
- retval = nautilus_query_editor_handle_event (self->query_editor, event);
+ retval = nautilus_query_editor_handle_event (self->query_editor,
+ controller,
+ keyval,
+ state);
}
if (retval)
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 268578789..0a6f1a1d0 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -73,8 +73,10 @@ void nautilus_window_slot_stop_loading (NautilusWindowSlot *
const gchar *nautilus_window_slot_get_title (NautilusWindowSlot *slot);
void nautilus_window_slot_update_title (NautilusWindowSlot *slot);
-gboolean nautilus_window_slot_handle_event (NautilusWindowSlot *slot,
- GdkEvent *event);
+gboolean nautilus_window_slot_handle_event (NautilusWindowSlot *slot,
+ GtkEventControllerKey *controller,
+ guint keyval,
+ GdkModifierType state);
void nautilus_window_slot_queue_reload (NautilusWindowSlot *slot);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 8998f37ab..fa1168b04 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -2397,15 +2397,13 @@ nautilus_window_key_bubble (GtkEventControllerKey *controller,
GdkModifierType state,
gpointer user_data)
{
- g_autoptr (GdkEvent) event = NULL;
GtkWidget *widget;
NautilusWindow *window;
- event = gtk_get_current_event ();
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (controller));
window = NAUTILUS_WINDOW (widget);
if (window->active_slot != NULL &&
- nautilus_window_slot_handle_event (window->active_slot, (GdkEvent *) event))
+ nautilus_window_slot_handle_event (window->active_slot, controller, keyval, state))
{
return GDK_EVENT_STOP;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]