[gtk+] gtk: Prefer group-0 keycodes



commit dd402bd7af112abf13ea53dfe39dd1d59df18196
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Feb 29 15:05:34 2012 +0000

    gtk: Prefer group-0 keycodes
    
    As we don't give out information about the group or level when
    giving back keycodes, we should prioritise group-0, level-0, followed by
    level-0 only, and then any keycodes.
    
    This fixes "q" being pressed when the Wacom tablet code in
    gnome-settings-daemon is supposed to generate an "a" ("uk" keymap
    in group-0, "fr" in group-1).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=671065

 gtk/gtkaccelgroup.c |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkaccelgroup.c b/gtk/gtkaccelgroup.c
index b76e226..22e38e8 100644
--- a/gtk/gtkaccelgroup.c
+++ b/gtk/gtkaccelgroup.c
@@ -1378,14 +1378,24 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                 {
                   *accelerator_codes = g_new0 (guint, n_keys + 1);
 
-                  /* Prefer level-0 keys to modified keys */
+                  /* Prefer level-0 group-0 keys to modified keys */
                   for (i = 0, j = 0; i < n_keys; ++i)
                     {
-                      if (keys[i].level == 0)
+                      if (keys[i].level == 0 && keys[i].group == 0)
                         (*accelerator_codes)[j++] = keys[i].keycode;
                     }
 
-                  /* No level-0 keys? Find in the whole keymap */
+                  /* No level-0 group-0 keys? Find in the whole group-0 */
+                  if (j == 0)
+                    {
+                      for (i = 0, j = 0; i < n_keys; ++i)
+                        {
+                          if (keys[i].group == 0)
+                            (*accelerator_codes)[j++] = keys[i].keycode;
+                        }
+                    }
+
+                  /* Still nothing? Try in other groups */
                   if (j == 0)
                     {
                       for (i = 0, j = 0; i < n_keys; ++i)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]