Xnest: fetch keycode min/max from setup data

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-08-13 17:29:26 +02:00
parent f312058776
commit c68ba314db

View File

@ -29,6 +29,7 @@ is" without express or implied warranty.
#include "servermd.h" #include "servermd.h"
#include "Xnest.h" #include "Xnest.h"
#include "xnest-xcb.h"
#include "Display.h" #include "Display.h"
#include "Screen.h" #include "Screen.h"
@ -98,7 +99,6 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
XModifierKeymap *modifier_keymap; XModifierKeymap *modifier_keymap;
KeySym *keymap; KeySym *keymap;
int mapWidth; int mapWidth;
int min_keycode, max_keycode;
KeySymsRec keySyms; KeySymsRec keySyms;
CARD8 modmap[MAP_LENGTH]; CARD8 modmap[MAP_LENGTH];
int i, j; int i, j;
@ -108,7 +108,11 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
switch (onoff) { switch (onoff) {
case DEVICE_INIT: 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 #ifdef _XSERVER64
{ {
KeySym64 *keymap64; KeySym64 *keymap64;
@ -116,7 +120,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
keymap64 = XGetKeyboardMapping(xnestDisplay, keymap64 = XGetKeyboardMapping(xnestDisplay,
min_keycode, min_keycode,
max_keycode - min_keycode + 1, num_keycode,
&mapWidth); &mapWidth);
len = (max_keycode - min_keycode + 1) * mapWidth; len = (max_keycode - min_keycode + 1) * mapWidth;
if (!(keymap = calloc(len, sizeof(KeySym)))) if (!(keymap = calloc(len, sizeof(KeySym))))
@ -128,7 +132,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
#else #else
keymap = XGetKeyboardMapping(xnestDisplay, keymap = XGetKeyboardMapping(xnestDisplay,
min_keycode, min_keycode,
max_keycode - min_keycode + 1, &mapWidth); num_keycode, &mapWidth);
#endif #endif
memset(modmap, 0, sizeof(modmap)); memset(modmap, 0, sizeof(modmap));
@ -175,6 +179,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
XkbFreeKeyboard(xkb, 0, FALSE); XkbFreeKeyboard(xkb, 0, FALSE);
free(keymap); free(keymap);
break; break;
}
case DEVICE_ON: case DEVICE_ON:
xnestEventMask |= XNEST_KEYBOARD_EVENT_MASK; xnestEventMask |= XNEST_KEYBOARD_EVENT_MASK;
for (i = 0; i < xnestNumScreens; i++) for (i = 0; i < xnestNumScreens; i++)