summaryrefslogtreecommitdiff
path: root/xkb
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-11-17 22:50:07 +0100
committerDave Airlie <airlied@linux.ie>2007-11-23 23:21:33 +1000
commita80e64f1503a4d8b11c4a6608d296422c69e3e8b (patch)
treeaeef3673c12f54a39b2d98b7bdca72d04519729c /xkb
parent63351df0eec320aa3ce27d4d2ee6bcdb58aa2d92 (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.c15
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;
}