File add-smooth-scrolling-config-options.diff of Package xf86-input-evdev.461

From c3251deb4b988610c3766081345e49f538fca865 Mon Sep 17 00:00:00 2001
From: Peter De Wachter <pdewacht@gmail.com>
Date: Wed, 3 Oct 2012 20:48:24 +0200
Subject: Add configuration options for smooth scrolling.

This patch creates three new xorg.conf options, VertScrollDelta,
HorizScrollDelta and DialDelta, which adjust the sensitivity of
smooth scrolling. These options take a positive integer, default
value is 1.

Signed-off-by: Peter De Wachter <pdewacht@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/man/evdev.man b/man/evdev.man
index 220dd13..85cea10 100644
--- a/man/evdev.man
+++ b/man/evdev.man
@@ -226,6 +226,17 @@ Specify the X Input 1.x type (see XListInputDevices(__libmansuffix__)).
 There is rarely a need to use this option, evdev will guess the device type
 based on the device's capabilities. This option is provided for devices that
 need quirks.
+.TP 7
+.BI "Option \*qVertScrollDelta\*q \*q" integer \*q
+The amount of motion considered one unit of scrolling vertically.
+Default: "1".
+.TP 7
+.BI "Option \*qHorizScrollDelta\*q \*q" integer \*q
+The amount of motion considered one unit of scrolling horizontally.
+Default: "1".
+.TP 7
+.BI "Option \*qDialDelta\*q \*q" integer \*q
+The amount of motion considered one unit of turning the dial.  Default: "1".
 
 .SH SUPPORTED PROPERTIES
 The following properties are provided by the
diff --git a/src/evdev.c b/src/evdev.c
index 1aa92d2..812b177 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1519,7 +1519,8 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int want_scroll_axes)
                                        NO_AXIS_LIMITS, NO_AXIS_LIMITS,
                                        0, 0, 0, Relative);
             SetScrollValuator(device, pEvdev->rel_axis_map[idx],
-                              SCROLL_TYPE_VERTICAL, -1.0,
+                              SCROLL_TYPE_VERTICAL,
+                              -pEvdev->smoothScroll.vert_delta,
                               SCROLL_FLAG_PREFERRED);
         }
 
@@ -1532,7 +1533,8 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int want_scroll_axes)
                                        NO_AXIS_LIMITS, NO_AXIS_LIMITS,
                                        0, 0, 0, Relative);
             SetScrollValuator(device, pEvdev->rel_axis_map[idx],
-                              SCROLL_TYPE_HORIZONTAL, 1.0,
+                              SCROLL_TYPE_HORIZONTAL,
+                              pEvdev->smoothScroll.horiz_delta,
                               SCROLL_FLAG_NONE);
         }
 
@@ -1545,7 +1547,8 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device, int want_scroll_axes)
                                        NO_AXIS_LIMITS, NO_AXIS_LIMITS,
                                        0, 0, 0, Relative);
             SetScrollValuator(device, pEvdev->rel_axis_map[idx],
-                              SCROLL_TYPE_VERTICAL, -1.0,
+                              SCROLL_TYPE_VERTICAL,
+                              -pEvdev->smoothScroll.dial_delta,
                               SCROLL_FLAG_NONE);
         }
     }
@@ -1686,11 +1689,17 @@ EvdevAddRelValuatorClass(DeviceIntPtr device)
         xf86InitValuatorDefaults(device, axnum);
 #ifdef HAVE_SMOOTH_SCROLLING
         if (axis == REL_WHEEL)
-            SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL, -1.0, SCROLL_FLAG_PREFERRED);
+            SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL,
+                              -pEvdev->smoothScroll.vert_delta,
+                              SCROLL_FLAG_PREFERRED);
         else if (axis == REL_DIAL)
-            SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL, -1.0, SCROLL_FLAG_NONE);
+            SetScrollValuator(device, axnum, SCROLL_TYPE_VERTICAL,
+                              -pEvdev->smoothScroll.dial_delta,
+                              SCROLL_FLAG_NONE);
         else if (axis == REL_HWHEEL)
-            SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL, 1.0, SCROLL_FLAG_NONE);
+            SetScrollValuator(device, axnum, SCROLL_TYPE_HORIZONTAL,
+                              pEvdev->smoothScroll.horiz_delta,
+                              SCROLL_FLAG_NONE);
 #endif
     }
 
@@ -2372,6 +2381,15 @@ EvdevProbe(InputInfoPtr pInfo)
         xf86IDrvMsg(pInfo, X_INFO, "Adding scrollwheel support\n");
         pEvdev->flags |= EVDEV_BUTTON_EVENTS;
         pEvdev->flags |= EVDEV_RELATIVE_EVENTS;
+
+#ifdef HAVE_SMOOTH_SCROLLING
+        pEvdev->smoothScroll.vert_delta =
+            xf86SetIntOption(pInfo->options, "VertScrollDelta", 1);
+        pEvdev->smoothScroll.horiz_delta =
+            xf86SetIntOption(pInfo->options, "HorizScrollDelta", 1);
+        pEvdev->smoothScroll.dial_delta =
+            xf86SetIntOption(pInfo->options, "DialDelta", 1);
+#endif
     }
 
 out:
diff --git a/src/evdev.h b/src/evdev.h
index 563d108..520d017 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -220,6 +220,11 @@ typedef struct {
         Time                expires;     /* time of expiry */
         Time                timeout;
     } emulateWheel;
+    struct {
+        int                 vert_delta;
+        int                 horiz_delta;
+        int                 dial_delta;
+    } smoothScroll;
     /* run-time calibration */
     struct {
         int                 min_x;
-- 
cgit v0.10.2

openSUSE Build Service is sponsored by