Bug #3913: Suppress kernel-generated repeat events for chording keys.

This commit is contained in:
Adam Jackson
2005-09-23 22:32:23 +00:00
parent 7d5839eb99
commit ce0cafa115

View File

@@ -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;