diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2012-04-26 11:47:19 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-04-26 16:13:41 +1000 |
commit | 1a76d9f00e1e54ba912a47aa665968e0cfe1b8a0 (patch) | |
tree | 342c8f6d7d3fc01b0ee29a5f75ae903142a1c105 | |
parent | ba31b09ba8aff6b8f3b0590e724183b0d2802ffc (diff) |
Don't unconditionally divide by scroll_dist_vert (#46617)
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 <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r-- | src/synaptics.c | 26 |
1 files 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; |