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:
parent
79ee78de9d
commit
de8be07cc0
|
@ -102,6 +102,15 @@ EventToCore(InternalEvent *event, xEvent *core)
|
||||||
switch(event->any.type)
|
switch(event->any.type)
|
||||||
{
|
{
|
||||||
case ET_Motion:
|
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_ButtonPress:
|
||||||
case ET_ButtonRelease:
|
case ET_ButtonRelease:
|
||||||
case ET_KeyPress:
|
case ET_KeyPress:
|
||||||
|
|
Loading…
Reference in New Issue