diff options
author | Batchty <batchman@free.fr> | 2008-11-23 20:46:14 +0100 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@redhat.com> | 2008-11-25 09:45:07 +1000 |
commit | 6cbdb0a10574d57a563337adb54afdf89996bc36 (patch) | |
tree | 11c37c7d4a74b273f85b773ec589278476c5cf57 | |
parent | fbcb056ea5a2fdb178c945098f55ef564e4fa5ac (diff) |
Ignore moves during tap processing if no finger is down.
The Dell Inspiron 1520 with a Synaptics touchpad loves to send event like
these after every finger release :
time x y z f w l r u d m multi gl gm gr gdx gdy
1.563 3224 1625 57 1 5 0 0 0 0 0 00000000 0 0 0 0 0
1.574 3251 1632 30 1 5 0 0 0 0 0 00000000 0 0 0 0 0
1.584 3292 1673 10 1 5 0 0 0 0 0 00000000 0 0 0 0 0
1.594 1 5855 3 2 5 0 0 0 0 0 00000000 0 0 0 0 0
1.634 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
1.746 1 5855 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
1.897 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
Most of the time these events are ignored by the driver, but sometimes it
confuses two-finger scrolling and tap detection.
For example, in this log, the first tap is recognized, the second isn't :
time x y z f w l r u d m multi gl gm gr gdx gdy
11.597 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
11.678 1 5855 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
11.688 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
11.709 3862 2406 8 1 5 0 0 0 0 0 00000000 0 0 0 0 0
11.719 3851 2464 67 1 5 0 0 0 0 0 00000000 0 0 0 0 0
11.729 3849 2407 35 1 4 0 0 0 0 0 00000000 0 0 0 0 0
11.739 3858 2578 5 1 9 0 0 0 0 0 00000000 0 0 0 0 0
11.749 3858 2578 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
11.850 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
11.860 1 5855 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
12.073 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
12.083 1 5855 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
12.347 1 5855 4 2 5 0 0 0 0 0 00000000 0 0 0 0 0
12.357 3844 2381 56 1 4 0 0 0 0 0 00000000 0 0 0 0 0
12.377 3848 2361 32 1 4 0 0 0 0 0 00000000 0 0 0 0 0
12.388 1 5855 3 2 5 0 0 0 0 0 00000000 0 0 0 0 0
12.398 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
12.408 1 5855 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0
12.428 1 5855 1 2 5 0 0 0 0 0 00000000 0 0 0 0 0
The problem with the second tap is that the driver check if the movement from
(3848,2361) to (1,5855) is over TapMaxMove before it checks for a finger release.
So the driver considers it as a (short) finger move.
Add the condition ''the finger is still present'' to the 'move' condition, so
we ignore these moves..
Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
Signed-off-by: Simon Thum <eGore@gmx.de>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
-rw-r--r-- | src/synaptics.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/synaptics.c b/src/synaptics.c index df29358..dce2c9c 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -1249,7 +1249,7 @@ HandleTapProcessing(SynapticsPrivate *priv, struct SynapticsHwState *hw, release = !finger && priv->finger_state; move = ((priv->tap_max_fingers <= ((priv->horiz_scroll_twofinger_on || priv->vert_scroll_twofinger_on)? 2 : 1)) && ((abs(hw->x - priv->touch_on.x) >= para->tap_move) || - (abs(hw->y - priv->touch_on.y) >= para->tap_move))); + (abs(hw->y - priv->touch_on.y) >= para->tap_move)) && finger); if (touch) { priv->touch_on.x = hw->x; |