diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c index e1c42284f..daad11002 100644 --- a/hw/xnest/Keyboard.c +++ b/hw/xnest/Keyboard.c @@ -32,6 +32,7 @@ is" without express or implied warranty. #include "servermd.h" #include "Xnest.h" +#include "xnest-xcb.h" #include "Display.h" #include "Screen.h" @@ -117,7 +118,6 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) XModifierKeymap *modifier_keymap; KeySym *keymap; int mapWidth; - int min_keycode, max_keycode; KeySymsRec keySyms; CARD8 modmap[MAP_LENGTH]; int i, j; @@ -127,7 +127,11 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) switch (onoff) { case DEVICE_INIT: - XDisplayKeycodes(xnestDisplay, &min_keycode, &max_keycode); + { + const int min_keycode = xnestUpstreamInfo.setup->min_keycode; + const int max_keycode = xnestUpstreamInfo.setup->max_keycode; + const int num_keycode = max_keycode - min_keycode + 1; + #ifdef _XSERVER64 { KeySym64 *keymap64; @@ -135,7 +139,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) keymap64 = XGetKeyboardMapping(xnestDisplay, min_keycode, - max_keycode - min_keycode + 1, + num_keycode, &mapWidth); len = (max_keycode - min_keycode + 1) * mapWidth; keymap = xallocarray(len, sizeof(KeySym)); @@ -146,7 +150,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) #else keymap = XGetKeyboardMapping(xnestDisplay, min_keycode, - max_keycode - min_keycode + 1, &mapWidth); + num_keycode, &mapWidth); #endif memset(modmap, 0, sizeof(modmap)); @@ -193,6 +197,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) XkbFreeKeyboard(xkb, 0, FALSE); free(keymap); break; + } case DEVICE_ON: xnestEventMask |= XNEST_KEYBOARD_EVENT_MASK; for (i = 0; i < xnestNumScreens; i++)