Commit 743c45b9 authored by Hans de Goede's avatar Hans de Goede Committed by Peter Hutterer
Browse files

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: default avatarHans de Goede <>
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <>
parent 71652fe1
......@@ -660,6 +660,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);
......@@ -667,6 +668,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)) {
......@@ -742,9 +744,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;
case ABS_Y:
hw->y = apply_st_scaling(proto_data, ev.value, 1);
if (sync_cumulative)
hw->cumulative_dy = hw->y;
hw->z = ev.value;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment