diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c index 20bcac549..2b2d4a8ca 100644 --- a/hw/xnest/Events.c +++ b/hw/xnest/Events.c @@ -126,6 +126,7 @@ xnestCollectEvents() break; case ButtonPress: + xnestUpdateModifierState(X.xkey.state); x.u.u.type = ButtonPress; x.u.u.detail = X.xbutton.button; x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis(); @@ -133,6 +134,7 @@ xnestCollectEvents() break; case ButtonRelease: + xnestUpdateModifierState(X.xkey.state); x.u.u.type = ButtonRelease; x.u.u.detail = X.xbutton.button; x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis(); diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c index c63b080ed..903750346 100644 --- a/hw/xnest/Keyboard.c +++ b/hw/xnest/Keyboard.c @@ -138,7 +138,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) int mapWidth; int min_keycode, max_keycode; KeySymsRec keySyms; - CARD8 modmap[256]; + CARD8 modmap[MAP_LENGTH]; int i, j; XKeyboardState values; @@ -168,7 +168,7 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff) &mapWidth); #endif - for (i = 0; i < 256; i++) + for (i = 0; i < MAP_LENGTH; i++) modmap[i] = 0; for (j = 0; j < 8; j++) for(i = 0; i < modifier_keymap->max_keypermod; i++) { @@ -294,6 +294,8 @@ xnestUpdateModifierState(unsigned int state) int i; CARD8 mask; + state = state & 0xff; + if (keyc->state == state) return;