Hi Peter,
> Input: Add smooth-scrolling support to GetPointerEvents
There's a subtle bug on that one: Old-style scroll button presses create
inverted emulated presses (and maybe inverted valuator events, but I don't
know which direction is 'up' or 'down' on the valuator).
Take a look at dix/getevents.c, GetPointerEvents():
> switch(buttons) {
> case 4:
> adj = 1.0;
> [snip]
> }
> [snip]
> adj *= pDev->valuator->axes[axis].scroll.increment;
> val = valuator_mask_get_double(&mask, axis) + adj;
> valuator_mask_set_double(&mask, axis, val);
So if increment > 0 and button 4 is pressed, the valuator gets incremented.
Later in emulate_scroll_button_events():
> delta = valuator_mask_get_double(mask, axis)
> - valuator_mask_get_double(last, axis)
=> delta > 0
> b = (ax->scroll.type == SCROLL_TYPE_VERTICAL) ? 5 : 7
> if((incr > 0 && delta < 0) ||
> (incr < 0 && delta > 0))
> b--; /* we're scrolling up or left → button 4 or 6 */
Since incr > 0 and delta > 0, we get button 5.
So either that condition needs to be changed, or the conversion in
GetPointerEvents() needs to be flipped.
Max
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel