[PATCH 3/5] dix: move storing last.valuators into a helper function

Peter Hutterer peter.hutterer at who-t.net
Sat Dec 10 18:57:48 PST 2011


On Sat, Dec 10, 2011 at 01:45:13PM +0100, walter harms wrote:
> 
> 
> Am 10.12.2011 08:54, schrieb Peter Hutterer:
> > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > ---
> >  dix/getevents.c |   38 ++++++++++++++++++++++++++------------
> >  1 files changed, 26 insertions(+), 12 deletions(-)
> > 
> > diff --git a/dix/getevents.c b/dix/getevents.c
> > index bc532ca..3b3194d 100644
> > --- a/dix/getevents.c
> > +++ b/dix/getevents.c
> > @@ -1099,6 +1099,30 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
> >          valuator_mask_set_double(mask, 1, y);
> >  }
> >  
> > +static void
> > +storeLastValuators(DeviceIntPtr dev, ValuatorMask *mask,
> > +                   int xaxis, int yaxis,
> > +                   double devx, double devy)
> > +{
> > +    int i;
> > +
> > +    /* store desktop-wide in last.valuators */
> > +    if (valuator_mask_isset(mask, xaxis))
> > +        dev->last.valuators[0] = devx;
> > +    if (valuator_mask_isset(mask, yaxis))
> > +        dev->last.valuators[1] = devy;
> > +
> > +    for (i = 0; i < valuator_mask_size(mask); i++)
> > +    {
> > +        if (i == xaxis || i == yaxis)
> > +            continue;
> > +
> > +        if (valuator_mask_isset(mask, i))
> > +            dev->last.valuators[i] = valuator_mask_get_double(mask, i);
> > +    }
> > +
> > +}
> > +
> 
> is xaxis,yaxis always 0,1 ? then you could start with i=2
> otherwise dev->last.valuators[i] would overwrite dev->last.valuators[0]
> is that intended ?

the whole reason for this patch is that with touch events, the x/y axes may
be different. See also patches 1/5 and 2/5.

Cheers,
  Peter

> 
> >  /**
> >   * Generate internal events representing this pointer event and enqueue them
> >   * on the event queue.
> > @@ -1167,7 +1191,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
> >                      int buttons, CARD32 ms, int flags,
> >                      const ValuatorMask *mask_in)
> >  {
> > -    int num_events = 1, i;
> > +    int num_events = 1;
> >      DeviceEvent *event;
> >      RawDeviceEvent *raw;
> >      double screenx = 0.0, screeny = 0.0; /* desktop coordinate system */
> > @@ -1242,17 +1266,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
> >  
> >      clipValuators(pDev, &mask);
> >  
> > -    /* store desktop-wide in last.valuators */
> > -    if (valuator_mask_isset(&mask, 0))
> > -        pDev->last.valuators[0] = devx;
> > -    if (valuator_mask_isset(&mask, 1))
> > -        pDev->last.valuators[1] = devy;
> > -
> > -    for (i = 2; i < valuator_mask_size(&mask); i++)
> > -    {
> > -        if (valuator_mask_isset(&mask, i))
> > -            pDev->last.valuators[i] = valuator_mask_get_double(&mask, i);
> > -    }
> > +    storeLastValuators(pDev, &mask, 0, 1, devx, devy);
> >  
> >      /* Update the MD's co-ordinates, which are always in desktop space. */
> >      if (!IsMaster(pDev) || !IsFloating(pDev)) {


More information about the xorg-devel mailing list