xserver: Branch 'master'

Dave Airlie airlied at kemper.freedesktop.org
Fri Nov 23 05:21:44 PST 2007


 xkb/xkbAccessX.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

New commits:
commit a80e64f1503a4d8b11c4a6608d296422c69e3e8b
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Sat Nov 17 22:50:07 2007 +0100

    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.

diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index 4c6e3d4..43b82e1 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;
 }
 


More information about the xorg-commit mailing list