summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-02-21 10:31:43 +0100
committerPeter Hutterer <peter.hutterer@who-t.net>2014-04-30 12:53:59 +1000
commitad834529c3fb63ced0ed74efb6c382d1761467c8 (patch)
tree858015ae784629558cf7e13af50b60b103ea0dc2
parentdb920ba696d7870b1b074ae2daff1e93a7296b99 (diff)
On button down update cumulative to current x and y, instead of previous
When a button click and new coordinates get reported in one go we sync the cumulative coordinates to the old x and y, rather then the newly reported ones. This keeping of the old coordinates causes the following issue: -touch the touchpad in its right click area -let go of the touchpad -rapidly click in the left click area (or middle area), so that the new location and the click get reported in one syn (may require some practicing with evemu-record to reproduce) -the driver registers the click as a right click because it uses the old coordinates from the cumulative coordinates to determine the click location Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 743c45b9cfd057d00c37dab1cfca4b6202fb2642)
-rw-r--r--src/eventcomm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/eventcomm.c b/src/eventcomm.c
index d3795c1..94f6bc7 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -663,6 +663,7 @@ EventReadHwState(InputInfoPtr pInfo,
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
SynapticsParameters *para = &priv->synpara;
struct eventcomm_proto_data *proto_data = priv->proto_data;
+ Bool sync_cumulative = FALSE;
SynapticsResetTouchHwState(hw, FALSE);
@@ -670,6 +671,7 @@ EventReadHwState(InputInfoPtr pInfo,
if (!hw->left && !hw->right && !hw->middle) {
hw->cumulative_dx = hw->x;
hw->cumulative_dy = hw->y;
+ sync_cumulative = TRUE;
}
while (SynapticsReadEvent(pInfo, &ev)) {
@@ -745,9 +747,13 @@ EventReadHwState(InputInfoPtr pInfo,
switch (ev.code) {
case ABS_X:
hw->x = apply_st_scaling(proto_data, ev.value, 0);
+ if (sync_cumulative)
+ hw->cumulative_dx = hw->x;
break;
case ABS_Y:
hw->y = apply_st_scaling(proto_data, ev.value, 1);
+ if (sync_cumulative)
+ hw->cumulative_dy = hw->y;
break;
case ABS_PRESSURE:
hw->z = ev.value;