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
This commit is contained in:
Michael Natterer 2011-09-16 15:54:03 +02:00 committed by Michael Natterer
parent c50063397f
commit a99d14f61c
2 changed files with 18 additions and 8 deletions

View File

@ -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:

View File

@ -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;
}