Fix 2fg scroll threshold handling (#1249365)
This commit is contained in:
parent
f214e24e93
commit
83d26eb5cf
@ -0,0 +1,81 @@
|
|||||||
|
From 323357335db0a470fdcc7fe4f1929aac2154e214 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Wed, 5 Aug 2015 10:55:39 +1000
|
||||||
|
Subject: [PATCH libinput] evdev: split scroll threshold and direction lock
|
||||||
|
threshold into two
|
||||||
|
|
||||||
|
The previous code used a 5mm threshold before axis events were posted. This
|
||||||
|
threshold was on top of the 2mm 2fg threshold (and timeout handling) in the
|
||||||
|
gesture code and effectively prevented events from being sent after a timeout,
|
||||||
|
or in the 2mm-5mm range.
|
||||||
|
|
||||||
|
We still want a directional lock though, so split the two out. The default 5mm
|
||||||
|
threshold is set to 0 for touchpads since we have our own handling of the
|
||||||
|
threshold there. The directional lock only applies once scrollin has started
|
||||||
|
and remains on 5mm.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
---
|
||||||
|
src/evdev-mt-touchpad.c | 5 +++--
|
||||||
|
src/evdev.c | 5 +++--
|
||||||
|
src/evdev.h | 1 +
|
||||||
|
3 files changed, 7 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
|
||||||
|
index a683d9a..872da98 100644
|
||||||
|
--- a/src/evdev-mt-touchpad.c
|
||||||
|
+++ b/src/evdev-mt-touchpad.c
|
||||||
|
@@ -1628,8 +1628,9 @@ tp_init_scroll(struct tp_dispatch *tp, struct evdev_device *device)
|
||||||
|
tp->scroll.method = tp_scroll_get_default_method(tp);
|
||||||
|
tp->device->base.config.scroll_method = &tp->scroll.config_method;
|
||||||
|
|
||||||
|
- /* In mm for touchpads with valid resolution, see tp_init_accel() */
|
||||||
|
- tp->device->scroll.threshold = 5.0;
|
||||||
|
+ /* In mm for touchpads with valid resolution, see tp_init_accel() */
|
||||||
|
+ tp->device->scroll.threshold = 0.0;
|
||||||
|
+ tp->device->scroll.direction_lock_threshold = 5.0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
diff --git a/src/evdev.c b/src/evdev.c
|
||||||
|
index 17c2604..53ebf9d 100644
|
||||||
|
--- a/src/evdev.c
|
||||||
|
+++ b/src/evdev.c
|
||||||
|
@@ -2146,6 +2146,7 @@ evdev_device_create(struct libinput_seat *seat,
|
||||||
|
device->pending_event = EVDEV_NONE;
|
||||||
|
device->devname = libevdev_get_name(device->evdev);
|
||||||
|
device->scroll.threshold = 5.0; /* Default may be overridden */
|
||||||
|
+ device->scroll.direction_lock_threshold = 5.0; /* Default may be overridden */
|
||||||
|
device->scroll.direction = 0;
|
||||||
|
device->scroll.wheel_click_angle =
|
||||||
|
evdev_read_wheel_click_prop(device);
|
||||||
|
@@ -2414,12 +2415,12 @@ evdev_post_scroll(struct evdev_device *device,
|
||||||
|
trigger speed to start scrolling in the other direction */
|
||||||
|
} else if (!evdev_is_scrolling(device,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL)) {
|
||||||
|
- if (fabs(delta->y) >= device->scroll.threshold)
|
||||||
|
+ if (fabs(delta->y) >= device->scroll.direction_lock_threshold)
|
||||||
|
evdev_start_scrolling(device,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
|
||||||
|
} else if (!evdev_is_scrolling(device,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) {
|
||||||
|
- if (fabs(delta->x) >= device->scroll.threshold)
|
||||||
|
+ if (fabs(delta->x) >= device->scroll.direction_lock_threshold)
|
||||||
|
evdev_start_scrolling(device,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL);
|
||||||
|
}
|
||||||
|
diff --git a/src/evdev.h b/src/evdev.h
|
||||||
|
index be5df0d..65c5a41 100644
|
||||||
|
--- a/src/evdev.h
|
||||||
|
+++ b/src/evdev.h
|
||||||
|
@@ -166,6 +166,7 @@ struct evdev_device {
|
||||||
|
void (*change_scroll_method)(struct evdev_device *device);
|
||||||
|
bool button_scroll_active;
|
||||||
|
double threshold;
|
||||||
|
+ double direction_lock_threshold;
|
||||||
|
uint32_t direction;
|
||||||
|
struct normalized_coords buildup;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.4.3
|
||||||
|
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Name: libinput
|
Name: libinput
|
||||||
Version: 0.21.0
|
Version: 0.21.0
|
||||||
Release: 2%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
|
Release: 3%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
|
||||||
Summary: Input device library
|
Summary: Input device library
|
||||||
|
|
||||||
License: MIT
|
License: MIT
|
||||||
@ -22,6 +22,8 @@ Source0: http://www.freedesktop.org/software/libinput/libinput-%{version}
|
|||||||
Patch01: 0001-touchpad-serial-synaptics-need-to-fake-new-touches-o.patch
|
Patch01: 0001-touchpad-serial-synaptics-need-to-fake-new-touches-o.patch
|
||||||
|
|
||||||
Patch02: 0001-filter-fix-acceleration-threshold-assignment.patch
|
Patch02: 0001-filter-fix-acceleration-threshold-assignment.patch
|
||||||
|
# Bug 1249365 - Two finger scrolling is insensitive for small movements, then too sensitive
|
||||||
|
Patch03: 0001-evdev-split-scroll-threshold-and-direction-lock-thre.patch
|
||||||
|
|
||||||
BuildRequires: git
|
BuildRequires: git
|
||||||
BuildRequires: autoconf automake libtool pkgconfig
|
BuildRequires: autoconf automake libtool pkgconfig
|
||||||
@ -99,6 +101,9 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 05 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.21.0-3
|
||||||
|
- Fix 2fg scroll threshold handling (#1249365)
|
||||||
|
|
||||||
* Tue Aug 04 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.21.0-2
|
* Tue Aug 04 2015 Peter Hutterer <peter.hutterer@redhat.com> 0.21.0-2
|
||||||
- Fix pointer speed configuration, broke with 0.21.0
|
- Fix pointer speed configuration, broke with 0.21.0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user