]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkaccelgroup.c
gtkiconview: Use symbolic names for button numbers
[~andy/gtk] / gtk / gtkaccelgroup.c
index cb31d029bd723ce2e9d84c9ce82c2b6d45b8cc72..f089336552edb8215aded47edb4cfe777590222b 100644 (file)
@@ -31,7 +31,7 @@
 #include "gtkaccelgroup.h"
 #include "gtkaccelgroupprivate.h"
 #include "gtkaccellabel.h"
-#include "gtkaccelmap.h"
+#include "gtkaccelmapprivate.h"
 #include "gtkintl.h"
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
@@ -1323,8 +1323,6 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                gchar *endptr;
                gint tmp_keycode;
 
-               keyval = GDK_KEY_VoidSymbol;
-
                memcpy (keystring, accelerator, 4);
                keystring [4] = '\000';
 
@@ -1367,7 +1365,7 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                }
            }
 
-          if (keyval != GDK_KEY_VoidSymbol && accelerator_codes != NULL)
+          if (keyval && accelerator_codes != NULL)
             {
               GdkKeymapKey *keys;
               gint n_keys, i, j;
@@ -1382,12 +1380,20 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
                 {
                   *accelerator_codes = g_new0 (guint, n_keys + 1);
 
+                  /* Prefer level-0 keys to modified keys */
                   for (i = 0, j = 0; i < n_keys; ++i)
                     {
                       if (keys[i].level == 0)
                         (*accelerator_codes)[j++] = keys[i].keycode;
                     }
 
+                  /* No level-0 keys? Find in the whole keymap */
+                  if (j == 0)
+                    {
+                      for (i = 0, j = 0; i < n_keys; ++i)
+                        (*accelerator_codes)[j++] = keys[i].keycode;
+                    }
+
                   if (j == 0)
                     {
                       g_free (*accelerator_codes);