summaryrefslogtreecommitdiff
path: root/gtk/gtkaccelgroup.c
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2012-02-29 15:05:34 +0000
committerBastien Nocera <hadess@hadess.net>2012-03-13 18:28:49 +0100
commitdd402bd7af112abf13ea53dfe39dd1d59df18196 (patch)
tree18527ebc1134fcb865dc6f8d2d2473f92e55992e /gtk/gtkaccelgroup.c
parente9f070db0f173814aa6436fd40d1eaf9e6f4bfa8 (diff)
downloadgtk+-dd402bd7af112abf13ea53dfe39dd1d59df18196.tar.gz
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
Diffstat (limited to 'gtk/gtkaccelgroup.c')
-rw-r--r--gtk/gtkaccelgroup.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gtk/gtkaccelgroup.c b/gtk/gtkaccelgroup.c
index b76e2268d1..22e38e88ed 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)