summaryrefslogtreecommitdiff
authorAlyssa Hung <ahung@isisview.org>2012-04-13 05:04:38 (GMT)
committer Peter Hutterer <peter.hutterer@who-t.net>2012-04-16 01:44:14 (GMT)
commit1874094f0e99d8db319f6cf769ce5a25c9bc490c (patch) (side-by-side diff)
tree6a349556129e3a436aa8bcc86248d389ad4bebd3
parent38b93b71c812c6d7b7085f40d049b0a4927e52dd (diff)
downloadxf86-input-synaptics-1874094f0e99d8db319f6cf769ce5a25c9bc490c.zip
xf86-input-synaptics-1874094f0e99d8db319f6cf769ce5a25c9bc490c.tar.gz
Support inverted scroll direction.
This patch allows scroll direction to be inverted by allowing VertScrollDelta and HorizScrollDelta to be set to negative values. This enables behaviour that is consistent with modern touchscreen devices, where the content scrolls in the same direction as the user's finger movement. Signed-off-by: Alyssa Hung <ahung@isisview.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--man/synaptics.man3
-rw-r--r--src/synaptics.c4
-rw-r--r--tools/synclient.c4
3 files changed, 7 insertions, 4 deletions
diff --git a/man/synaptics.man b/man/synaptics.man
index 864a95f..2cbe50e 100644
--- a/man/synaptics.man
+++ b/man/synaptics.man
@@ -634,6 +634,9 @@ HorizScrollDelta parameters.
To disable vertical or horizontal scrolling, set VertScrollDelta or
HorizScrollDelta to zero.
.
+To invert the direction of vertical or horizontal scrolling, set
+VertScrollDelta or HorizScrollDelta to a negative value.
+.
.LP
Acceleration is mostly handled outside the driver, thus the driver will
translate MinSpeed into constant deceleration and adapt MaxSpeed at
diff --git a/src/synaptics.c b/src/synaptics.c
index fd6eb73..40478ec 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2558,14 +2558,14 @@ HandleScrolling(SynapticsPrivate *priv, struct SynapticsHwState *hw,
if (priv->vert_scroll_edge_on || priv->vert_scroll_twofinger_on) {
/* + = down, - = up */
- if (para->scroll_dist_vert > 0 && hw->y != priv->scroll.last_y) {
+ if (para->scroll_dist_vert != 0 && hw->y != priv->scroll.last_y) {
priv->scroll.delta_y += (hw->y - priv->scroll.last_y);
priv->scroll.last_y = hw->y;
}
}
if (priv->horiz_scroll_edge_on || priv->horiz_scroll_twofinger_on) {
/* + = right, - = left */
- if (para->scroll_dist_horiz > 0 && hw->x != priv->scroll.last_x) {
+ if (para->scroll_dist_horiz != 0 && hw->x != priv->scroll.last_x) {
priv->scroll.delta_x += (hw->x - priv->scroll.last_x);
priv->scroll.last_x = hw->x;
}
diff --git a/tools/synclient.c b/tools/synclient.c
index aef719f..6c8ee7a 100644
--- a/tools/synclient.c
+++ b/tools/synclient.c
@@ -90,8 +90,8 @@ static struct Parameter params[] = {
{"EmulateMidButtonTime", PT_INT, 0, 1000, SYNAPTICS_PROP_MIDDLE_TIMEOUT,32, 0},
{"EmulateTwoFingerMinZ", PT_INT, 0, 1000, SYNAPTICS_PROP_TWOFINGER_PRESSURE, 32, 0},
{"EmulateTwoFingerMinW", PT_INT, 0, 15, SYNAPTICS_PROP_TWOFINGER_WIDTH, 32, 0},
- {"VertScrollDelta", PT_INT, 0, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE, 32, 0},
- {"HorizScrollDelta", PT_INT, 0, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE, 32, 1},
+ {"VertScrollDelta", PT_INT, -1000, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE, 32, 0},
+ {"HorizScrollDelta", PT_INT, -1000, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE, 32, 1},
{"VertEdgeScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 0},
{"HorizEdgeScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 1},
{"CornerCoasting", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 2},