From a99d14f61c673415a335ab5932023507c775a1b8 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 16 Sep 2011 15:54:03 +0200 Subject: [PATCH] quartz: resolve the modifier confusion on the Mac - map Alt/Option to MOD1 - map Command to MOD2 - map MOD2 to the virtual Meta - improve/fix (?) group handling in gdkkeys-quartz.c --- gdk/quartz/gdkevents-quartz.c | 8 +++++--- gdk/quartz/gdkkeys-quartz.c | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index f7f42aca7..546fa231e 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -223,8 +223,10 @@ get_keyboard_modifiers_from_ns_event (NSEvent *nsevent) modifiers |= GDK_SHIFT_MASK; if (nsflags & NSControlKeyMask) modifiers |= GDK_CONTROL_MASK; - if (nsflags & NSCommandKeyMask) + if (nsflags & NSAlternateKeyMask) modifiers |= GDK_MOD1_MASK; + if (nsflags & NSCommandKeyMask) + modifiers |= GDK_MOD2_MASK; return modifiers; } @@ -912,7 +914,7 @@ fill_key_event (GdkWindow *window, { case GDK_KEY_Meta_R: case GDK_KEY_Meta_L: - mask = GDK_MOD1_MASK; + mask = GDK_MOD2_MASK; break; case GDK_KEY_Shift_R: case GDK_KEY_Shift_L: @@ -923,7 +925,7 @@ fill_key_event (GdkWindow *window, break; case GDK_KEY_Alt_R: case GDK_KEY_Alt_L: - mask = GDK_MOD5_MASK; + mask = GDK_MOD1_MASK; break; case GDK_KEY_Control_R: case GDK_KEY_Control_L: diff --git a/gdk/quartz/gdkkeys-quartz.c b/gdk/quartz/gdkkeys-quartz.c index 70c9596bd..9c925ae14 100644 --- a/gdk/quartz/gdkkeys-quartz.c +++ b/gdk/quartz/gdkkeys-quartz.c @@ -561,8 +561,8 @@ gdk_quartz_keymap_get_entries_for_keyval (GdkKeymap *keymap, (*n_keys)++; key.keycode = i / KEYVALS_PER_KEYCODE; - key.group = 0; - key.level = i % KEYVALS_PER_KEYCODE; + key.group = (i % KEYVALS_PER_KEYCODE) >= 2; + key.level = i % 2; g_array_append_val (keys_array, key); } @@ -617,7 +617,7 @@ gdk_quartz_keymap_get_entries_for_keycode (GdkKeymap *keymap, GdkKeymapKey key; key.keycode = hardware_keycode; - key.group = i / 2; + key.group = i >= 2; key.level = i % 2; g_array_append_val (keys_array, key); @@ -673,6 +673,11 @@ translate_keysym (guint hardware_keycode, tmp_keyval = upper; } + if (effective_group) + *effective_group = group; + if (effective_level) + *effective_level = level; + return tmp_keyval; } @@ -727,14 +732,17 @@ static void gdk_quartz_keymap_add_virtual_modifiers (GdkKeymap *keymap, GdkModifierType *state) { - /* FIXME: For now, we've mimiced the Windows backend. */ + if (*state & GDK_MOD2_MASK) + *state |= GDK_META_MASK; } static gboolean gdk_quartz_keymap_map_virtual_modifiers (GdkKeymap *keymap, GdkModifierType *state) { - /* FIXME: For now, we've mimiced the Windows backend. */ + if (*state & GDK_META_MASK) + *state |= GDK_MOD2_MASK; + return TRUE; } -- 2.43.2