[gnome-builder] libide-gui: add up/down and ctrl+n/ctrl+p search movements
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide-gui: add up/down and ctrl+n/ctrl+p search movements
- Date: Wed, 13 Jul 2022 06:31:08 +0000 (UTC)
commit 01f7672ce913769a293d5abfcbef52046f3c3667
Author: Christian Hergert <chergert redhat com>
Date: Tue Jul 12 22:37:55 2022 -0700
libide-gui: add up/down and ctrl+n/ctrl+p search movements
This is just handy for people used to various keybindings in different
search systems.
src/libide/gui/gtk/keybindings.json | 5 +++++
src/libide/gui/ide-search-popover.c | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
---
diff --git a/src/libide/gui/gtk/keybindings.json b/src/libide/gui/gtk/keybindings.json
index 7b87d715a..6976f3f17 100644
--- a/src/libide/gui/gtk/keybindings.json
+++ b/src/libide/gui/gtk/keybindings.json
@@ -1,6 +1,11 @@
/* Global Search */
{ "trigger" : "<Control>Return", "action" : "workbench.global-search", "when" : "canSearch()", "phase" :
"capture" },
{ "trigger" : "Escape", "action" : "search.hide", "when" : "inPopoverSearch() || inPageSearch()", "phase" :
"capture" },
+{ "trigger" : "Down", "action" : "search.move", "args" : "1", "when" : "inPopoverSearch()", "phase" :
"capture" },
+{ "trigger" : "Up", "action" : "search.move", "args" : "-1", "when" : "inPopoverSearch()", "phase" :
"capture" },
+{ "trigger" : "<Control>n", "action" : "search.move", "args" : "1", "when" : "inPopoverSearch()", "phase" :
"capture" },
+{ "trigger" : "<Control>p", "action" : "search.move", "args" : "-1", "when" : "inPopoverSearch()", "phase" :
"capture" },
+
/* New Files */
{ "trigger" : "<Control>n", "action" : "editorui.new-file", "when" : "canEdit()", "phase" : "bubble" },
diff --git a/src/libide/gui/ide-search-popover.c b/src/libide/gui/ide-search-popover.c
index 922413c13..69093c62d 100644
--- a/src/libide/gui/ide-search-popover.c
+++ b/src/libide/gui/ide-search-popover.c
@@ -257,6 +257,42 @@ ide_search_popover_entry_activate_cb (IdeSearchPopover *self,
ide_search_popover_queue_search (self);
}
+static void
+ide_search_popover_move_action (GtkWidget *widget,
+ const char *action_name,
+ GVariant *param)
+{
+ IdeSearchPopover *self = (IdeSearchPopover *)widget;
+ guint selected;
+ int dir;
+
+ IDE_ENTRY;
+
+ g_assert (IDE_IS_MAIN_THREAD ());
+ g_assert (IDE_IS_SEARCH_POPOVER (self));
+ g_assert (g_variant_is_of_type (param, G_VARIANT_TYPE_INT32));
+
+ selected = gtk_single_selection_get_selected (self->selection);
+ dir = g_variant_get_int32 (param);
+
+ if (dir < 0)
+ {
+ if (selected < ABS (dir))
+ selected = 0;
+ else
+ selected -= ABS (dir);
+ }
+ else
+ {
+ selected += dir;
+ }
+
+ if (selected < g_list_model_get_n_items (G_LIST_MODEL (self->selection)))
+ gtk_single_selection_set_selected (self->selection, selected);
+
+ IDE_EXIT;
+}
+
static void
ide_search_popover_next_match_cb (IdeSearchPopover *self,
GtkSearchEntry *entry)
@@ -395,6 +431,7 @@ ide_search_popover_class_init (IdeSearchPopoverClass *klass)
gtk_widget_class_bind_template_callback (widget_class, ide_search_popover_previous_match_cb);
gtk_widget_class_install_action (widget_class, "search.hide", NULL, ide_search_popover_hide_action);
+ gtk_widget_class_install_action (widget_class, "search.move", "i", ide_search_popover_move_action);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]