diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-11-17 22:50:07 +0100 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2007-11-23 23:21:33 +1000 |
commit | a80e64f1503a4d8b11c4a6608d296422c69e3e8b (patch) | |
tree | aeef3673c12f54a39b2d98b7bdca72d04519729c /xkb | |
parent | 63351df0eec320aa3ce27d4d2ee6bcdb58aa2d92 (diff) |
XKB: Generate correct key repeat events (bug #13114)
Make sure we send the correct event for the type of device when we're
sending key repeat events, which stops repeats being sent to incorrect
windows.
Diffstat (limited to 'xkb')
-rw-r--r-- | xkb/xkbAccessX.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c index 4c6e3d45b..43b82e162 100644 --- a/xkb/xkbAccessX.c +++ b/xkb/xkbAccessX.c @@ -308,14 +308,19 @@ xkbControlsNotify cn; static CARD32 AccessXRepeatKeyExpire(OsTimerPtr timer,CARD32 now,pointer arg) { -XkbSrvInfoPtr xkbi= ((DeviceIntPtr)arg)->key->xkbInfo; +DeviceIntPtr dev = (DeviceIntPtr) arg; +XkbSrvInfoPtr xkbi = dev->key->xkbInfo; KeyCode key; +BOOL is_core; - if (xkbi->repeatKey==0) + if (xkbi->repeatKey == 0) return 0; - key= xkbi->repeatKey; - AccessXKeyboardEvent((DeviceIntPtr)arg,KeyRelease,key,True); - AccessXKeyboardEvent((DeviceIntPtr)arg,KeyPress,key,True); + + is_core = (dev == inputInfo.keyboard); + key = xkbi->repeatKey; + AccessXKeyboardEvent(dev, is_core ? KeyRelease : DeviceKeyRelease, key, + True); + AccessXKeyboardEvent(dev, is_core ? KeyPress : DeviceKeyPress, key, True); return xkbi->desc->ctrls->repeat_interval; } |