[PATCH synaptics v2 1/2] Don't unconditionally divide by scroll_dist_vert (#46617)

Peter Hutterer peter.hutterer at who-t.net
Wed Apr 25 23:15:40 PDT 2012


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 at who-t.net>
---
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



More information about the xorg-devel mailing list