Xnest: Match the host's keymap
This was a regression. Introduced by:08363c5830
and32db27a7f8
Masked by:1e69fd4a60
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
parent
4597ac6fe0
commit
83fef4235d
|
@ -114,11 +114,13 @@ xnestChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl *ctrl)
|
||||||
int
|
int
|
||||||
xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
||||||
{
|
{
|
||||||
|
XModifierKeymap *modifier_keymap;
|
||||||
KeySym *keymap;
|
KeySym *keymap;
|
||||||
int mapWidth;
|
int mapWidth;
|
||||||
int min_keycode, max_keycode;
|
int min_keycode, max_keycode;
|
||||||
KeySymsRec keySyms;
|
KeySymsRec keySyms;
|
||||||
int i;
|
CARD8 modmap[MAP_LENGTH];
|
||||||
|
int i, j;
|
||||||
XKeyboardState values;
|
XKeyboardState values;
|
||||||
XkbDescPtr xkb;
|
XkbDescPtr xkb;
|
||||||
int op, event, error, major, minor;
|
int op, event, error, major, minor;
|
||||||
|
@ -130,7 +132,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
||||||
#ifdef _XSERVER64
|
#ifdef _XSERVER64
|
||||||
{
|
{
|
||||||
KeySym64 *keymap64;
|
KeySym64 *keymap64;
|
||||||
int i, len;
|
int len;
|
||||||
keymap64 = XGetKeyboardMapping(xnestDisplay,
|
keymap64 = XGetKeyboardMapping(xnestDisplay,
|
||||||
min_keycode,
|
min_keycode,
|
||||||
max_keycode - min_keycode + 1,
|
max_keycode - min_keycode + 1,
|
||||||
|
@ -148,6 +150,16 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
||||||
&mapWidth);
|
&mapWidth);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
memset(modmap, 0, sizeof(modmap));
|
||||||
|
modifier_keymap = XGetModifierMapping(xnestDisplay);
|
||||||
|
for (j = 0; j < 8; j++)
|
||||||
|
for(i = 0; i < modifier_keymap->max_keypermod; i++) {
|
||||||
|
CARD8 keycode;
|
||||||
|
if ((keycode = modifier_keymap->modifiermap[j * modifier_keymap->max_keypermod + i]))
|
||||||
|
modmap[keycode] |= 1<<j;
|
||||||
|
}
|
||||||
|
XFreeModifiermap(modifier_keymap);
|
||||||
|
|
||||||
keySyms.minKeyCode = min_keycode;
|
keySyms.minKeyCode = min_keycode;
|
||||||
keySyms.maxKeyCode = max_keycode;
|
keySyms.maxKeyCode = max_keycode;
|
||||||
keySyms.mapWidth = mapWidth;
|
keySyms.mapWidth = mapWidth;
|
||||||
|
@ -165,7 +177,12 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
||||||
XkbGetControls(xnestDisplay, XkbAllControlsMask, xkb);
|
XkbGetControls(xnestDisplay, XkbAllControlsMask, xkb);
|
||||||
|
|
||||||
InitKeyboardDeviceStruct(pDev, NULL,
|
InitKeyboardDeviceStruct(pDev, NULL,
|
||||||
xnestBell, xnestChangeKeyboardControl);
|
xnestBell, xnestChangeKeyboardControl);
|
||||||
|
|
||||||
|
XkbApplyMappingChange(pDev, &keySyms, keySyms.minKeyCode,
|
||||||
|
keySyms.maxKeyCode - keySyms.minKeyCode + 1,
|
||||||
|
modmap, serverClient);
|
||||||
|
|
||||||
XkbDDXChangeControls(pDev, xkb->ctrls, xkb->ctrls);
|
XkbDDXChangeControls(pDev, xkb->ctrls, xkb->ctrls);
|
||||||
XkbFreeKeyboard(xkb, 0, False);
|
XkbFreeKeyboard(xkb, 0, False);
|
||||||
free(keymap);
|
free(keymap);
|
||||||
|
|
Loading…
Reference in New Issue