Fix broken 2fg scrolling on single-touch touchpads (#1246651)

- Drop distance threshold for 2fg gesture detection (#1246868)
This commit is contained in:
Peter Hutterer 2015-07-30 13:53:39 +10:00
parent 3abc616915
commit 5d1af9d382
3 changed files with 99 additions and 1 deletions

View File

@ -0,0 +1,59 @@
From 6b59b4273c38570258519d16357dd0953b650bc8 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue, 28 Jul 2015 12:54:16 +1000
Subject: [PATCH libinput] touchpad: drop distance threshold to detect pinches
This gives us too many false positives of 2fg scroll being detected as pinch
gesture. Reporter in [1] uses index+ring finger and thus exceeds the distance
easily (that's admittedly a special case).
This is worsed by the lack of a client stack that handles the gestures. User's
don't see that they're inadvertently performing a gesture, they just see 2fg
scroll not working.
Drop the distance for now, once we have a ubiquitous client stack we can
revisit and bring it back.
[1] https://bugzilla.redhat.com/show_bug.cgi?id=1246868
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
src/evdev-mt-touchpad-gestures.c | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index 6b1a273..3b1839e 100644
--- a/src/evdev-mt-touchpad-gestures.c
+++ b/src/evdev-mt-touchpad-gestures.c
@@ -264,26 +264,11 @@ tp_gesture_twofinger_handle_state_none(struct tp_dispatch *tp, uint64_t time)
static enum tp_gesture_2fg_state
tp_gesture_twofinger_handle_state_unknown(struct tp_dispatch *tp, uint64_t time)
{
- struct normalized_coords normalized;
- struct device_float_coords delta;
struct tp_touch *first = tp->gesture.touches[0],
*second = tp->gesture.touches[1];
int dir1, dir2;
- delta = device_delta(first->point, second->point);
- normalized = tp_normalize_delta(tp, delta);
-
- /* If fingers are further than 3 cm apart assume pinch */
- if (normalized_length(normalized) > TP_MM_TO_DPI_NORMALIZED(30)) {
- tp_gesture_get_pinch_info(tp,
- &tp->gesture.initial_distance,
- &tp->gesture.angle,
- &tp->gesture.center);
- tp->gesture.prev_scale = 1.0;
- return GESTURE_2FG_STATE_PINCH;
- }
-
- /* Elif fingers have been close together for a while, scroll */
+ /* if fingers stay unmoving for a while, assume (slow) scroll */
if (time > (tp->gesture.initial_time + DEFAULT_GESTURE_2FG_SCROLL_TIMEOUT)) {
tp_gesture_set_scroll_buildup(tp);
return GESTURE_2FG_STATE_SCROLL;
--
2.4.3

View File

@ -0,0 +1,32 @@
From c24a69a0db8cc18e580cc813b91fae6aff9bb74a Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 29 Jul 2015 17:12:53 +1000
Subject: [PATCH libinput] gestures: check ntouches, not just num_slots for the
number of fingers
We need to check fake fingers as well as real fingers, especially for
two-finger scrolling on single-touch touchpads with BTN_TOOL_DOUBLETAP.
https://bugzilla.redhat.com/show_bug.cgi?id=1246651
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
src/evdev-mt-touchpad-gestures.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index 8bcdeb4..6b1a273 100644
--- a/src/evdev-mt-touchpad-gestures.c
+++ b/src/evdev-mt-touchpad-gestures.c
@@ -157,7 +157,7 @@ tp_gesture_get_active_touches(struct tp_dispatch *tp,
memset(touches, 0, count * sizeof(struct tp_touch *));
- for (i = 0; i < tp->num_slots; i++) {
+ for (i = 0; i < tp->ntouches; i++) {
t = &tp->touches[i];
if (tp_touch_active(tp, t)) {
touches[n++] = t;
--
2.4.3

View File

@ -5,7 +5,7 @@
Name: libinput
Version: 0.20.0
Release: 5%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Release: 6%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Summary: Input device library
License: MIT
@ -30,6 +30,9 @@ Patch10: 0003-Tag-synaptics-serial-touchpads-with-a-LIBINPUT_MODEL.patch
Patch11: 0004-touchpad-disable-2fg-scrolling-on-Synaptics-semi-mt-.patch
# Bug 1246651 - two-finger scroll stopped working with upgrade to 0.20.0-1
Patch12: 0001-udev-add-size-hint-for-appletouch-one-button-touchpa.patch
Patch13: 0002-gestures-check-ntouches-not-just-num_slots-for-the-n.patch
# Bug 1246868 Two finger scrolling does not work with first and fourth fingers (cf. Synaptics driver)
Patch14: 0001-touchpad-drop-distance-threshold-to-detect-pinches.patch
BuildRequires: git
BuildRequires: autoconf automake libtool pkgconfig
@ -107,6 +110,10 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
%changelog
* Thu Jul 30 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.20.0-6
- Fix broken 2fg scrolling on single-touch touchpads (#1246651)
- Drop distance threshold for 2fg gesture detection (#1246868)
* Wed Jul 29 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.20.0-5
- Add a size hint for Apple one-button touchpads (#1246651)