[PATCH] dix: don't create core motion events for non-x/y valuators.
Bartosz Brachaczek
b.brachaczek at gmail.com
Mon Aug 16 22:08:57 PDT 2010
2010/8/17 Peter Hutterer <peter.hutterer at who-t.net>:
> 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
>
>
Tested-by: Bartosz Brachaczek <b.brachaczek at gmail.com>
This fixes the issue for me. Thanks a lot!
More information about the xorg-devel
mailing list