summaryrefslogtreecommitdiff
path: root/gtk/gtkcellrendereraccel.c
diff options
context:
space:
mode:
authorMichael Natterer <mitch@lanedo.com>2011-11-18 12:25:03 +0100
committerMichael Natterer <mitch@gimp.org>2011-11-18 13:06:27 +0100
commit1c8481a6ea52f34210177f54159d231ea4ba0b7d (patch)
tree9583e4b0b6f7453593281f24f69b290c8e68e7c3 /gtk/gtkcellrendereraccel.c
parent43dd705308c0c30b573e82cffb67992081c81b7b (diff)
downloadgtk+-1c8481a6ea52f34210177f54159d231ea4ba0b7d.tar.gz
Bug 663856 - Make option-foo accelerators use the right symbol
If the keyboard group shifting modifier is *also* a normal accelerator modifier, we need to special case it when calling gdk_keymap_translate_keyboard_state(), so we get the right key symbol for accelerators (for example we want Option-O, not Option-Ø displayed in menu items). This patch should only affect quartz where the Alt key both shifts the group and can be used as accel modifier, and not X11 or Win32 where AltGr is not used for accelerators. - fix quartz' gdk_keymap_translate_keyboard_state() to return the right consumed_modifiers - add _gtk_translate_keyboard_accel_state() which does the special casing - use it everywhere instead of gdk_keymap_translate_keyboard_state()
Diffstat (limited to 'gtk/gtkcellrendereraccel.c')
-rw-r--r--gtk/gtkcellrendereraccel.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/gtk/gtkcellrendereraccel.c b/gtk/gtkcellrendereraccel.c
index 037aaa10c5..56be7f4463 100644
--- a/gtk/gtkcellrendereraccel.c
+++ b/gtk/gtkcellrendereraccel.c
@@ -442,6 +442,7 @@ grab_key_callback (GtkWidget *widget,
GtkCellRendererAccelPrivate *priv = accel->priv;
GdkModifierType accel_mods = 0;
guint accel_key;
+ guint keyval;
gchar *path;
gboolean edited;
gboolean cleared;
@@ -456,16 +457,18 @@ grab_key_callback (GtkWidget *widget,
edited = FALSE;
cleared = FALSE;
- gdk_keymap_translate_keyboard_state (gdk_keymap_get_for_display (display),
+ accel_mods = event->state;
+
+ _gtk_translate_keyboard_accel_state (gdk_keymap_get_for_display (display),
event->hardware_keycode,
event->state,
+ gtk_accelerator_get_default_mod_mask (),
event->group,
- NULL, NULL, NULL, &consumed_modifiers);
+ &keyval, NULL, NULL, &consumed_modifiers);
- accel_mods = event->state;
gdk_keymap_add_virtual_modifiers (gdk_keymap_get_for_display (display), &accel_mods);
- accel_key = gdk_keyval_to_lower (event->keyval);
+ accel_key = gdk_keyval_to_lower (keyval);
if (accel_key == GDK_KEY_ISO_Left_Tab)
accel_key = GDK_KEY_Tab;
@@ -478,22 +481,22 @@ grab_key_callback (GtkWidget *widget,
/* Put shift back if it changed the case of the key, not otherwise.
*/
- if (accel_key != event->keyval)
+ if (accel_key != keyval)
accel_mods |= GDK_SHIFT_MASK;
if (accel_mods == 0)
{
- switch (event->keyval)
- {
- case GDK_KEY_Escape:
- goto out; /* cancel */
- case GDK_KEY_BackSpace:
- /* clear the accelerator on Backspace */
- cleared = TRUE;
- goto out;
- default:
- break;
- }
+ switch (keyval)
+ {
+ case GDK_KEY_Escape:
+ goto out; /* cancel */
+ case GDK_KEY_BackSpace:
+ /* clear the accelerator on Backspace */
+ cleared = TRUE;
+ goto out;
+ default:
+ break;
+ }
}
if (priv->accel_mode == GTK_CELL_RENDERER_ACCEL_MODE_GTK)