Browse Source

Even if we ignore the modifiers, we still have to respect

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
tags/v1.3.90
Pierre Ossman 11 years ago
parent
commit
0da2f1fd99
1 changed files with 9 additions and 4 deletions
  1. 9
    4
      unix/xserver/hw/vnc/InputXKB.cc

+ 9
- 4
unix/xserver/hw/vnc/InputXKB.cc View 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)

Loading…
Cancel
Save