summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Hung <ahung@isisview.org>2012-04-13 01:04:38 -0400
committerPeter Hutterer <peter.hutterer@who-t.net>2012-04-16 11:44:14 +1000
commit1874094f0e99d8db319f6cf769ce5a25c9bc490c (patch)
tree6a349556129e3a436aa8bcc86248d389ad4bebd3
parent38b93b71c812c6d7b7085f40d049b0a4927e52dd (diff)
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>
-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},