From 94324cb5ab4faf6c4503052bd546c7a893fa48bc Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 14 Sep 2009 12:00:18 +1000 Subject: [PATCH] xkb: drop key presses for already repeating keys. (#23889) The event sequence for continuously pressed keys with the keyboard driver is PRESS - PRESS - PRESS - ... - RELEASE. The first press sets the repeatKey to the keycode and the matching timer. The second press (on the same keycode) can be silently dropped instead of overwriting the timer again. X.Org Bug 23889 Signed-off-by: Peter Hutterer --- xkb/xkbAccessX.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c index 47023c0..fd30a1c 100644 --- a/xkb/xkbAccessX.c +++ b/xkb/xkbAccessX.c @@ -524,10 +524,14 @@ KeySym * sym = XkbKeySymsPtr(xkbi->desc,key); if (BitIsOn(keybd->kbdfeed->ctrl.autoRepeats,key)) { if (xkbDebugFlags&0x10) DebugF("Starting software autorepeat...\n"); - xkbi->repeatKey = key; - xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer, - 0, ctrls->repeat_delay, - AccessXRepeatKeyExpire, (pointer)keybd); + if (xkbi->repeatKey == key) + ignoreKeyEvent = TRUE; + else { + xkbi->repeatKey = key; + xkbi->repeatKeyTimer= TimerSet(xkbi->repeatKeyTimer, + 0, ctrls->repeat_delay, + AccessXRepeatKeyExpire, (pointer)keybd); + } } } } -- 1.6.3.rc1.2.g0164.dirty