[PATCH] dix: don't create core motion events for non-x/y valuators.
Peter Hutterer
peter.hutterer at who-t.net
Mon Aug 16 19:12:04 PDT 2010
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 at gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
dix/eventconvert.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 4e3de0b..0f747c1 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -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:
--
1.7.2.1
More information about the xorg-devel
mailing list