summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-04-11 20:41:36 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2014-04-23 08:43:57 +1000
commita6f0f4c9a5bcb0e25343dd4c59d4cc47cc5e8006 (patch)
tree7a4c4caf361855594182705e8222b150e71a3df8
parentf183c1c38778b659b4c75a0e2c532dd5a9f8d437 (diff)
Always count tripletap + click as 3 fingerclick on pads with < 3 touches
When trying to do a 3 fingerclick on a touchpad which only tracks 2 touches, this may register as a 3 or 2 fingerclick depending on the order in which the touchpad detects the fingers. If the 2 outer fingers of the 3 get seen first, then the 2 touches will be too far apart for the heuristic to see them as being close together, and the click gets counted as a 2 finger click. A user will likely never do a 2 finger click with a 3th finger resting somewhere else on the pad, where-as the above misdetection of the clicks is a real issue, so simply always count a click with trippletap set as a 3 finger click on pads which track less then 3 touches. https://bugzilla.redhat.com/show_bug.cgi?id=1086218 Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/synaptics.c25
1 files changed, 5 insertions, 20 deletions
diff --git a/src/synaptics.c b/src/synaptics.c
index f4c1d4a..118d1c6 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2673,26 +2673,11 @@ clickpad_guess_clickfingers(SynapticsPrivate * priv,
}
/* Some trackpads touchpad only track two touchpoints but announce
- BTN_TOOL_TRIPLETAP (which sets hw->numFingers to 3).
- This can affect clickfingers, in the following ways:
- * one finger down: normal click
- * two fingers down, close together: 2 finger click
- * two fingers down, apart: normal click
- * three fingers down, close together: 3 finger click
- * three fingers down, with two grouped next to each other: should be
- * 2-finger click but we can't detect this.
- * so: if two detected fingers are close together and HW says three
- * fingers, make it three fingers.
- * if two detected fingers are apart and HW says three fingers, make
- * it a two-finger click, guessing that the third finger is somewhere
- * close to another finger.
- */
- if (hw->numFingers >= 3 && nfingers < hw->numFingers) {
- if (!nfingers) /* touchpoints too far apart */
- nfingers = 2;
- else
- nfingers++;
- }
+ * BTN_TOOL_TRIPLETAP (which sets hw->numFingers to 3), when this happens
+ * the user likely intents to do a 3 finger click, so handle it as such.
+ */
+ if (hw->numFingers >= 3 && hw->num_mt_mask < 3)
+ nfingers = 3;
return nfingers;
}