]> source.dussan.org Git - tigervnc.git/commitdiff
Even if we ignore the modifiers, we still have to respect
authorPierre Ossman <ossman@cendio.se>
Thu, 30 May 2013 14:47:17 +0000 (14:47 +0000)
committerPierre Ossman <ossman@cendio.se>
Thu, 30 May 2013 14:47:17 +0000 (14:47 +0000)
the active group when we go looking for the level 3 shift key.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5117 3789f03b-4d11-0410-bbf8-ca57d06f2519

unix/xserver/hw/vnc/InputXKB.cc

index 7bc23778146078b234a81f221e8befb1c0217902..4c04ef9fcca490b243b9b24854daa09ac223c926 100644 (file)
@@ -210,20 +210,25 @@ unsigned InputDevice::getKeyboardState(void)
 
 unsigned InputDevice::getLevelThreeMask(void)
 {
+       unsigned state;
        KeyCode keycode;
        XkbDescPtr xkb;
        XkbAction *act;
 
-       keycode = keysymToKeycode(XK_ISO_Level3_Shift, 0, NULL);
+       /* Group state is still important */
+       state = getKeyboardState();
+       state &= ~0xff;
+
+       keycode = keysymToKeycode(XK_ISO_Level3_Shift, state, NULL);
        if (keycode == 0) {
-               keycode = keysymToKeycode(XK_Mode_switch, 0, NULL);
+               keycode = keysymToKeycode(XK_Mode_switch, state, NULL);
                if (keycode == 0)
                        return 0;
        }
 
        xkb = GetMaster(keyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
 
-       act = XkbKeyActionPtr(xkb, keycode, 0);
+       act = XkbKeyActionPtr(xkb, keycode, state);
        if (act == NULL)
                return 0;
        if (act->type != XkbSA_SetMods)
@@ -338,7 +343,7 @@ KeyCode InputDevice::pressLevelThree(void)
 
        xkb = GetMaster(keyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
 
-       act = XkbKeyActionPtr(xkb, keycode, 0);
+       act = XkbKeyActionPtr(xkb, keycode, state);
        if (act == NULL)
                return 0;
        if (act->type != XkbSA_SetMods)