[PATCH 2/2 v2] Handle non continuous valuator data in getValuatorEvents
Peter Hutterer
peter.hutterer at who-t.net
Mon Mar 28 18:39:53 PDT 2011
On Mon, Mar 28, 2011 at 04:04:48PM -0400, Chase Douglas wrote:
> This allows for masked valuators to be handled properly in XI 1.x
> events. Any unset valuators in the device event are set to the last
> known value when transmitted on the wire through XI 1.x valuator events.
>
> Fixes https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/736500
>
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
Both patches merged, thanks.
Cheers,
Peter
> ---
> dix/eventconvert.c | 11 +++++++----
> 1 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/dix/eventconvert.c b/dix/eventconvert.c
> index 9192080..3285133 100644
> --- a/dix/eventconvert.c
> +++ b/dix/eventconvert.c
> @@ -364,19 +364,18 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
> int i;
> int state = 0;
> int first_valuator, num_valuators;
> + DeviceIntPtr dev = NULL;
>
>
> num_valuators = countValuators(ev, &first_valuator);
> if (num_valuators > 0)
> {
> - DeviceIntPtr dev = NULL;
> dixLookupDevice(&dev, ev->deviceid, serverClient, DixUseAccess);
> /* State needs to be assembled BEFORE the device is updated. */
> state = (dev && dev->key) ? XkbStateFieldFromRec(&dev->key->xkbInfo->state) : 0;
> state |= (dev && dev->button) ? (dev->button->state) : 0;
> }
>
> - /* FIXME: non-continuous valuator data in internal events*/
> for (i = 0; i < num_valuators; i += 6, xv++) {
> INT32 *valuators = &xv->valuator0; // Treat all 6 vals as an array
> int j;
> @@ -387,8 +386,12 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
> xv->deviceid = ev->deviceid;
> xv->device_state = state;
>
> - for (j = 0; j < xv->num_valuators; j++)
> - valuators[j] = ev->valuators.data[xv->first_valuator + j];
> + for (j = 0; j < xv->num_valuators; j++) {
> + if (BitIsOn(ev->valuators.mask, xv->first_valuator + j))
> + valuators[j] = ev->valuators.data[xv->first_valuator + j];
> + else
> + valuators[j] = dev->valuator->axisVal[xv->first_valuator + j];
> + }
>
> if (i + 6 < num_valuators)
> xv->deviceid |= MORE_EVENTS;
> --
> 1.7.4.1
>
More information about the xorg-devel
mailing list