aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDima Kogan <dkogan@secretsauce.net>2009-08-16 23:11:50 -0700
committerPeter Hutterer <peter.hutterer@who-t.net>2009-08-18 13:09:33 +1000
commitf4ba2bd785b25fd522967abd7775925d5fded70f (patch)
tree9150fa2363c0529ed1589571a9991f50655c7646
parentRestrict wheel emulation to a single axis at a time. (diff)
downloadxf86-input-evdev-f4ba2bd785b25fd522967abd7775925d5fded70f.tar.gz
xf86-input-evdev-f4ba2bd785b25fd522967abd7775925d5fded70f.tar.bz2
xf86-input-evdev-f4ba2bd785b25fd522967abd7775925d5fded70f.zip
Allow 0 as wheel emulation button for unconditional scrolling (#20529)
If wheel emulation is on and the emulation button is 0, then any x/y motion of the device is converted into wheel events. The devices becomes a scrolling-only device. Signed-off-by: Dima Kogan <dkogan@cds.caltech.edu> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--include/evdev-properties.h2
-rw-r--r--man/evdev.man5
-rw-r--r--src/emuWheel.c12
3 files changed, 12 insertions, 7 deletions
diff --git a/include/evdev-properties.h b/include/evdev-properties.h
index 55c5a39..3e3c194 100644
--- a/include/evdev-properties.h
+++ b/include/evdev-properties.h
@@ -43,7 +43,7 @@
#define EVDEV_PROP_WHEEL_INERTIA "Evdev Wheel Emulation Inertia"
/* CARD16 */
#define EVDEV_PROP_WHEEL_TIMEOUT "Evdev Wheel Emulation Timeout"
-/* CARD8, value range 0-32 */
+/* CARD8, value range 0-32, 0 to always scroll */
#define EVDEV_PROP_WHEEL_BUTTON "Evdev Wheel Emulation Button"
/* Drag lock */
diff --git a/man/evdev.man b/man/evdev.man
index 07f125a..c3c5551 100644
--- a/man/evdev.man
+++ b/man/evdev.man
@@ -105,7 +105,10 @@ press/release events as specified for the
.B XAxisMapping
and
.B YAxisMapping
-settings. Default: 4. Property: "Evdev Wheel Emulation Button".
+settings. If the button is 0 and
+.BR EmulateWheel
+is on, any motion of the device is converted into wheel events. Default: 4.
+Property: "Evdev Wheel Emulation Button".
.TP 7
.BI "Option \*qEmulateWheelInertia\*q \*q" integer \*q
Specifies how far (in pixels) the pointer must move to generate button
diff --git a/src/emuWheel.c b/src/emuWheel.c
index cc23f1d..178b01b 100644
--- a/src/emuWheel.c
+++ b/src/emuWheel.c
@@ -100,18 +100,20 @@ EvdevWheelEmuFilterMotion(InputInfoPtr pInfo, struct input_event *pEv)
EvdevPtr pEvdev = (EvdevPtr)pInfo->private;
WheelAxisPtr pAxis = NULL, pOtherAxis = NULL;
int value = pEv->value;
- int ms;
/* Has wheel emulation been configured to be enabled? */
if (!pEvdev->emulateWheel.enabled)
return FALSE;
- /* Handle our motion events if the emuWheel button is pressed*/
- if (pEvdev->emulateWheel.button_state) {
+ /* Handle our motion events if the emuWheel button is pressed
+ * wheel button of 0 means always emulate wheel.
+ */
+ if (pEvdev->emulateWheel.button_state || !pEvdev->emulateWheel.button) {
/* Just return if the timeout hasn't expired yet */
- ms = pEvdev->emulateWheel.expires - GetTimeInMillis();
- if (ms > 0)
+ if (pEvdev->emulateWheel.button &&
+ pEvdev->emulateWheel.expires - GetTimeInMillis() > 0) {
return TRUE;
+ }
/* We don't want to intercept real mouse wheel events */
switch(pEv->code) {