summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBatchty <batchman@free.fr>2008-11-23 20:46:14 +0100
committerPeter Hutterer <peter.hutterer@redhat.com>2008-11-25 09:45:07 +1000
commit6cbdb0a10574d57a563337adb54afdf89996bc36 (patch)
tree11c37c7d4a74b273f85b773ec589278476c5cf57
parentfbcb056ea5a2fdb178c945098f55ef564e4fa5ac (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.c2
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;