From ce0cafa1151841b46dedce616472cf5f38ffde83 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Fri, 23 Sep 2005 22:32:23 +0000 Subject: Bug #3913: Suppress kernel-generated repeat events for chording keys. --- src/evdev.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index f1c7cea..aa1eb5d 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -99,6 +99,22 @@ PostButtonClicks(InputInfoPtr pInfo, int button, int count) } } +static void +PostKbdEvent(InputInfoPtr pInfo, struct input_event *ev, int value) +{ + /* filter repeat events for chording keys */ + if (value == 2 && + (ev->code == KEY_LEFTCTRL || ev->code == KEY_RIGHTCTRL || + ev->code == KEY_LEFTSHIFT || ev->code == KEY_RIGHTSHIFT || + ev->code == KEY_LEFTALT || ev->code == KEY_RIGHTALT || + ev->code == KEY_LEFTMETA || ev->code == KEY_RIGHTMETA || + ev->code == KEY_CAPSLOCK || ev->code == KEY_NUMLOCK || + ev->code == KEY_SCROLLLOCK)) /* XXX windows keys? */ + return; + + xf86PostKeyboardEvent(pInfo->dev, ev->code + MIN_KEYCODE, value); +} + static void EvdevReadInput(InputInfoPtr pInfo) { @@ -170,8 +186,7 @@ EvdevReadInput(InputInfoPtr pInfo) break; default: - xf86PostKeyboardEvent(pInfo->dev, - ev.code + MIN_KEYCODE, value); + PostKbdEvent(pInfo, &ev, value); } break; -- cgit v1.2.3