Previously, various pieces of code, including acceleration, used to drop the values into DeviceIntRec::last.valuators. Remove all this and only do it in GetPointerEvents after all transformation, acceleration and clipping, so we're guaranteed to always have the correct values.
Signed-off-by: Daniel Stone <[email protected]> Reviewed-by: Peter Hutterer <[email protected]> --- dix/getevents.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index 0ba992b..bbe54e0 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -720,7 +720,6 @@ moveAbsolute(DeviceIntPtr dev, ValuatorMask *mask) continue; val = valuator_mask_get_double(mask, i); clipAxis(dev, i, &val); - dev->last.valuators[i] = val; valuator_mask_set_double(mask, i, val); } } @@ -750,7 +749,6 @@ moveRelative(DeviceIntPtr dev, ValuatorMask *mask) if (valuator_get_mode(dev, i) == Absolute && ((i != 0 && i != 1) || clip_xy)) clipAxis(dev, i, &val); - dev->last.valuators[i] = val; valuator_mask_set_double(mask, i, val); } } @@ -840,10 +838,6 @@ positionSprite(DeviceIntPtr dev, int mode, ScreenPtr scr, ValuatorMask *mask, master->last.valuators[1] = *screeny; } - /* dropy x/y (device coordinates) back into valuators for next event */ - dev->last.valuators[0] = x; - dev->last.valuators[1] = y; - if (valuator_mask_isset(mask, 0)) valuator_mask_set_double(mask, 0, x); if (valuator_mask_isset(mask, 1)) @@ -1087,7 +1081,7 @@ QueuePointerEvents(DeviceIntPtr device, int type, int GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons, int flags, const ValuatorMask *mask_in) { - int num_events = 1; + int num_events = 1, i; CARD32 ms; DeviceEvent *event; RawDeviceEvent *raw; @@ -1168,6 +1162,12 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons clipValuators(pDev, &mask); + for (i = 0; i < valuator_mask_size(&mask); i++) + { + if (valuator_mask_isset(&mask, i)) + pDev->last.valuators[i] = valuator_mask_get_double(&mask, i); + } + event = &events->device_event; init_event(pDev, event, ms); -- 1.7.5.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
