summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-04-26 11:47:19 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-04-26 16:13:41 +1000
commit1a76d9f00e1e54ba912a47aa665968e0cfe1b8a0 (patch)
tree342c8f6d7d3fc01b0ee29a5f75ae903142a1c105
parentba31b09ba8aff6b8f3b0590e724183b0d2802ffc (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.c26
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;