dix: don't create core motion events for non-x/y valuators.

Devices that send motion events with valuators other than x/y get core
motion events with unchanged x/y coordinates. This confuses some
applications.

If the DeviceEvent does not have the x/y valuators set, return BadMatch on
core conversion, thus skipping the event altogether.

Reported-by: Bartosz Brachaczek <b.brachaczek@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Tested-by: Bartosz Brachaczek <b.brachaczek@gmail.com>
This commit is contained in:
Peter Hutterer 2010-08-17 12:08:52 +10:00
parent 79ee78de9d
commit de8be07cc0

View File

@ -102,6 +102,15 @@ EventToCore(InternalEvent *event, xEvent *core)
switch(event->any.type)
{
case ET_Motion:
{
DeviceEvent *e = &event->device_event;
/* Don't create core motion event if neither x nor y are
* present */
if (!BitIsOn(e->valuators.mask, 0) &&
!BitIsOn(e->valuators.mask, 1))
return BadMatch;
}
/* fallthrough */
case ET_ButtonPress:
case ET_ButtonRelease:
case ET_KeyPress: