summaryrefslogtreecommitdiff
path: root/src/evdev-mt-touchpad.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2016-08-29 10:47:08 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2016-08-29 20:10:50 +1000
commitaa87d2b25b88b86ddd1471f65e1afceff7fca9c4 (patch)
treef4f02f04ca275fa95edff57467b7b24a4ef3b4b5 /src/evdev-mt-touchpad.c
parentbc9e9267f0f67ea4562a053f8ff94e94790243e3 (diff)
touchpad: always reset the motion history on finger changes
We've already been doing this for semi-mt devices and for non-clickpads but let's do it for clickpads as well. On Synaptics touchpads (PS/2 and RMI4) we see slot jumps where two slots are active, slot X ends but slot Y continues with the other slot's positional data. This causes a cursor jump on finger lift after a two-finger scrolling motion. Simply resetting the motion history fixes it. The only multi-finger interaction where a user could expect perfect fluid motion is when using a second finger to touch cone of the software button areas. Let's see if we have complaints first before we implement something more complex. https://bugs.freedesktop.org/show_bug.cgi?id=91695 Signed-off-by:Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'src/evdev-mt-touchpad.c')
-rw-r--r--src/evdev-mt-touchpad.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 3baed09..65b0abf 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -957,11 +957,11 @@ tp_need_motion_history_reset(struct tp_dispatch *tp)
{
bool rc = false;
- /* Semi-mt finger postions may "jump" when nfingers changes. And on
- * a non-clickpad the only reason to have more than one finger down
- * is scrolling/gesture, so a reset just makes things sane again */
- if ((tp->semi_mt || !tp->buttons.is_clickpad) &&
- tp->nfingers_down != tp->old_nfingers_down)
+ /* Changing the numbers of fingers can cause a jump in the
+ * coordinates, always reset the motion history for all touches when
+ * that happens.
+ */
+ if (tp->nfingers_down != tp->old_nfingers_down)
return true;
/* if we're transitioning between slots and fake touches in either