diff options
author | Bastien Nocera <hadess@hadess.net> | 2012-02-29 15:05:34 +0000 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2012-03-13 18:28:49 +0100 |
commit | dd402bd7af112abf13ea53dfe39dd1d59df18196 (patch) | |
tree | 18527ebc1134fcb865dc6f8d2d2473f92e55992e /gtk/gtkaccelgroup.c | |
parent | e9f070db0f173814aa6436fd40d1eaf9e6f4bfa8 (diff) | |
download | gtk+-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.c | 16 |
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) |