[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