[gnome-builder] project-selector: add ctrl+f accelerator for search
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-selector: add ctrl+f accelerator for search
- Date: Sun, 19 Apr 2015 02:59:58 +0000 (UTC)
commit 378a454fc3be7f07e57a0e33e6778ff04774ef4a
Author: Christian Hergert <christian hergert me>
Date: Sat Apr 18 19:50:12 2015 -0700
project-selector: add ctrl+f accelerator for search
Ignore other modifier keys as well so the search bar does not get displayed
simply when pressing <Shift> or <Ctrl>.
We might want to break this out into actions at some point, but it is a
bit complex since we want to redirect the key-press to.
src/dialogs/gb-projects-dialog.c | 8 +++++---
src/util/gb-gdk.c | 30 ++++++++++++++++++++++++++++++
src/util/gb-gdk.h | 9 +++++----
3 files changed, 40 insertions(+), 7 deletions(-)
---
diff --git a/src/dialogs/gb-projects-dialog.c b/src/dialogs/gb-projects-dialog.c
index 8e20ba9..36ea900 100644
--- a/src/dialogs/gb-projects-dialog.c
+++ b/src/dialogs/gb-projects-dialog.c
@@ -554,9 +554,11 @@ gb_projects_dialog_key_press_event (GtkWidget *widget,
if (!gtk_toggle_button_get_active (self->search_button))
{
- if (!gb_gdk_event_key_is_keynav (event) &&
- !gb_gdk_event_key_is_space (event) &&
- !gb_gdk_event_key_is_tab (event))
+ if ((!gb_gdk_event_key_is_keynav (event) &&
+ !gb_gdk_event_key_is_space (event) &&
+ !gb_gdk_event_key_is_tab (event) &&
+ !gb_gdk_event_key_is_modifier_key (event)) ||
+ (((event->state & GDK_CONTROL_MASK) != 0) && (event->keyval == GDK_KEY_f)))
{
gtk_toggle_button_set_active (self->search_button, TRUE);
gtk_widget_event (GTK_WIDGET (self->search_entry), (GdkEvent *)event);
diff --git a/src/util/gb-gdk.c b/src/util/gb-gdk.c
index a950d81..87e40af 100644
--- a/src/util/gb-gdk.c
+++ b/src/util/gb-gdk.c
@@ -76,3 +76,33 @@ gb_gdk_event_key_is_tab (const GdkEventKey *event)
return (event->keyval == GDK_KEY_Tab) || (event->keyval == GDK_KEY_KP_Tab);
}
+
+gboolean
+gb_gdk_event_key_is_modifier_key (const GdkEventKey *event)
+{
+ static const guint modifier_keyvals[] = {
+ GDK_KEY_Shift_L, GDK_KEY_Shift_R, GDK_KEY_Shift_Lock,
+ GDK_KEY_Caps_Lock, GDK_KEY_ISO_Lock, GDK_KEY_Control_L,
+ GDK_KEY_Control_R, GDK_KEY_Meta_L, GDK_KEY_Meta_R,
+ GDK_KEY_Alt_L, GDK_KEY_Alt_R, GDK_KEY_Super_L, GDK_KEY_Super_R,
+ GDK_KEY_Hyper_L, GDK_KEY_Hyper_R, GDK_KEY_ISO_Level3_Shift,
+ GDK_KEY_ISO_Next_Group, GDK_KEY_ISO_Prev_Group,
+ GDK_KEY_ISO_First_Group, GDK_KEY_ISO_Last_Group,
+ GDK_KEY_Mode_switch, GDK_KEY_Num_Lock, GDK_KEY_Multi_key,
+ GDK_KEY_Scroll_Lock,
+ 0
+ };
+ const guint *ac_val;
+
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ ac_val = modifier_keyvals;
+
+ while (*ac_val)
+ {
+ if (event->keyval == *ac_val++)
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/util/gb-gdk.h b/src/util/gb-gdk.h
index f3cf587..0b67690 100644
--- a/src/util/gb-gdk.h
+++ b/src/util/gb-gdk.h
@@ -23,10 +23,11 @@
G_BEGIN_DECLS
-gboolean gb_gdk_event_key_is_escape (const GdkEventKey *event);
-gboolean gb_gdk_event_key_is_keynav (const GdkEventKey *event);
-gboolean gb_gdk_event_key_is_space (const GdkEventKey *event);
-gboolean gb_gdk_event_key_is_tab (const GdkEventKey *event);
+gboolean gb_gdk_event_key_is_escape (const GdkEventKey *event);
+gboolean gb_gdk_event_key_is_keynav (const GdkEventKey *event);
+gboolean gb_gdk_event_key_is_space (const GdkEventKey *event);
+gboolean gb_gdk_event_key_is_tab (const GdkEventKey *event);
+gboolean gb_gdk_event_key_is_modifier_key (const GdkEventKey *event);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]