Hi list, since some time, XkbSetDetectableAutoRepeat is broken. XkbSetDetectableAutoRepeat works by filtering in XkbFilterEvent all events that are equal to the previously stored XkbLastRepeatEvent(in AccessXKeyboardEvent). This is done by comparing the memory location. In current xservers, events get translated after they are created in AccessXKeyboardEvent and before XkbFilterEvent sees them, so this test does not work. For now, comparing time fixes this, but i don't know if that is sufficient. Attached patch does just this, and works here.
Regards, Pierre
commit fe9c299342c5d96750160992f66231a4044d0463 Author: Pierre Willenbrock <[email protected]> Date: Fri Jun 5 13:13:37 2009 +0200 Bandaid fix to repair XkbSetDetectableAutoRepeat diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index e56694d..b3e3703 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -938,14 +938,14 @@ XkbSrvInfoPtr xkbi; DebugF("[xkb] Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state); DebugF("[xkb] XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n", XkbLastRepeatEvent,xE, - ((XkbLastRepeatEvent!=(pointer)xE)?"True":"False")); + ((XkbLastRepeatEvent!=NULL && ((DeviceEvent*)XkbLastRepeatEvent)->time == xE->u.keyButtonPointer.time)?"True":"False")); DebugF("[xkb] (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n", pClient->xkbClientFlags, (_XkbWantsDetectableAutoRepeat(pClient)?"True":"False")); DebugF("[xkb] !IsRelease(%d) %s\n",xE[0].u.u.type, (!_XkbIsReleaseEvent(xE[0].u.u.type))?"True":"False"); } - if ( (XkbLastRepeatEvent==(pointer)xE) && + if ( (XkbLastRepeatEvent!=NULL && ((DeviceEvent*)XkbLastRepeatEvent)->time == xE->u.keyButtonPointer.time) && (_XkbWantsDetectableAutoRepeat(pClient)) && (_XkbIsReleaseEvent(xE[0].u.u.type)) ) { return False;
_______________________________________________ xorg mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/xorg
