Regression introduced in cddab79c408db3b13905a2be72aff4f7bf1406f8. If an event has a delta of less than scroll_dist_vert, the delta is unconditionally divided by the distance, leaving some remainder close to 0 and never actually triggering the scroll amount.
Fix this by working with the increment, not the normalised values. X.Org Bug 46617 <http://bugs.freedesktop.org/show_bug.cgi?id=46617> Signed-off-by: Peter Hutterer <[email protected]> --- Changes to v1: - also reset the repeat scroll buttons to use the scroll distance horizontally/verticall instead of 1.0. Not that I expect any of these devices to still be around. src/synaptics.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/synaptics.c b/src/synaptics.c index 2a43f95..893a5c8 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -2864,31 +2864,29 @@ post_scroll_events(const InputInfoPtr pInfo) SynapticsParameters *para = &priv->synpara; /* smooth scrolling uses the dist as increment */ - priv->scroll.delta_y /= para->scroll_dist_vert; - priv->scroll.delta_x /= para->scroll_dist_horiz; - while (priv->scroll.delta_y <= -1.0) + while (priv->scroll.delta_y <= -para->scroll_dist_vert) { post_button_click(pInfo, 4); - priv->scroll.delta_y += 1.0; + priv->scroll.delta_y += para->scroll_dist_vert; } - while (priv->scroll.delta_y >= 1.0) + while (priv->scroll.delta_y >= para->scroll_dist_vert) { post_button_click(pInfo, 5); - priv->scroll.delta_y -= 1.0; + priv->scroll.delta_y -= para->scroll_dist_vert; } - while (priv->scroll.delta_x <= -1.0) + while (priv->scroll.delta_x <= -para->scroll_dist_horiz) { post_button_click(pInfo, 6); - priv->scroll.delta_x += 1.0; + priv->scroll.delta_x += para->scroll_dist_horiz; } - while (priv->scroll.delta_x >= 1.0) + while (priv->scroll.delta_x >= para->scroll_dist_horiz) { post_button_click(pInfo, 7); - priv->scroll.delta_x -= 1.0; + priv->scroll.delta_x -= para->scroll_dist_horiz; } #endif } @@ -2934,13 +2932,13 @@ repeat_scrollbuttons(const InputInfoPtr pInfo, id = ffs(change); change &= ~(1 << (id - 1)); if (id == 4) - priv->scroll.delta_y -= 1.0; + priv->scroll.delta_y -= para->scroll_dist_vert; else if (id == 5) - priv->scroll.delta_y += 1.0; + priv->scroll.delta_y += para->scroll_dist_vert; else if (id == 6) - priv->scroll.delta_x -= 1.0; + priv->scroll.delta_x -= para->scroll_dist_horiz; else if (id == 7) - priv->scroll.delta_x += 1.0; + priv->scroll.delta_x += para->scroll_dist_horiz; } priv->nextRepeat = now + repeat_delay; -- 1.7.10 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
