[gnome-builder] project-selector: add ctrl+f accelerator for search



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]