diff --git a/dix/events.c b/dix/events.c index 61dd53417..d454b8f3b 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3150,7 +3150,7 @@ drawable.id:0; #ifdef XKB /* This function is used to set the key pressed or key released state - this is only used when the pressing of keys does not cause - CoreProcessKeyEvent to be called, as in for example Mouse Keys. + the device's processInputProc to be called, as in for example Mouse Keys. */ void FixKeyState (xEvent *xE, DeviceIntPtr keybd) @@ -3163,22 +3163,19 @@ FixKeyState (xEvent *xE, DeviceIntPtr keybd) kptr = &keyc->down[key >> 3]; bit = 1 << (key & 7); - if (((xE->u.u.type==KeyPress)||(xE->u.u.type==KeyRelease))) { + if (((xE->u.u.type==KeyPress)||(xE->u.u.type==KeyRelease)|| + (xE->u.u.type==DeviceKeyPress)||(xE->u.u.type==DeviceKeyRelease)) + ) { DebugF("FixKeyState: Key %d %s\n",key, - (xE->u.u.type==KeyPress?"down":"up")); + (((xE->u.u.type==KeyPress)||(xE->u.u.type==DeviceKeyPress))?"down":"up")); } - switch (xE->u.u.type) - { - case KeyPress: + if (xE->u.u.type == KeyPress || xE->u.u.type == DeviceKeyPress) *kptr |= bit; - break; - case KeyRelease: + else if (xE->u.u.type == KeyRelease || xE->u.u.type == DeviceKeyRelease) *kptr &= ~bit; - break; - default: - FatalError("Impossible keyboard event"); - } + else + FatalError("Impossible keyboard event"); } #endif