Commit ac943bf6 authored by Michael Natterer's avatar Michael Natterer 😴

gdk: exclude MOD1 from the virtual modifier mapping

which effectively nails down the MOD1 == ALT assumption that is valid
in all other parts of GTK+. After the modifier abstraction fixes for
OSX, the virtual mapping is now (correctly) used in more places, and
caused problems with the common default PC keyboard layout on X11 that
colocates ALT and META on the same key.
parent d8095366
......@@ -1489,13 +1489,12 @@ _gdk_x11_keymap_add_virt_mods (GdkKeymap *keymap,
keymap = GET_EFFECTIVE_KEYMAP (keymap);
keymap_x11 = GDK_X11_KEYMAP (keymap);
for (i = 3; i < 8; i++)
/* See comment in add_virtual_modifiers() */
for (i = 4; i < 8; i++)
{
if ((1 << i) & *modifiers)
{
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
*modifiers |= GDK_MOD1_MASK;
else if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
*modifiers |= GDK_SUPER_MASK;
else if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
*modifiers |= GDK_HYPER_MASK;
......@@ -1515,12 +1514,16 @@ gdk_x11_keymap_add_virtual_modifiers (GdkKeymap *keymap,
keymap = GET_EFFECTIVE_KEYMAP (keymap);
keymap_x11 = GDK_X11_KEYMAP (keymap);
for (i = 3; i < 8; i++)
/* This loop used to start at 3, which included MOD1 in the
* virtual mapping. However, all of GTK+ treats MOD1 as a
* synonym for Alt, and does not expect it to be mapped around,
* therefore it's more sane to simply treat MOD1 like SHIFT and
* CONTROL, which are not mappable either.
*/
for (i = 4; i < 8; i++)
{
if ((1 << i) & *state)
{
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
*state |= GDK_MOD1_MASK;
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
*state |= GDK_SUPER_MASK;
if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
......@@ -1589,7 +1592,8 @@ gdk_x11_keymap_map_virtual_modifiers (GdkKeymap *keymap,
{
if (*state & vmods[j])
{
for (i = 3; i < 8; i++)
/* See comment in add_virtual_modifiers() */
for (i = 4; i < 8; i++)
{
if (keymap_x11->modmap[i] & vmods[j])
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment