mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-22 04:30:41 +01:00
touchpad: Drop the scroll direction lock, increase threshold instead
The direction lock was intended to avoid erroneous horizontal scroll events when scrolling vertically (and vice versa). Some testing on my touchpad here shows that it is too easy to accidentally lock the direction when no lock is intended (e.g. moving around an image). And quite hard to figure out what a pure vertical gesture is. I get movements from 90 degrees to 70 degrees for something my brain would consider vertical scrolling. Depending on the hand position, the fingers actually perform a slight curve, not a straight line. Hence - drop the direction lock, but increase the threshold a little. It doesn't totally avoid horizontal scroll events but keeps them minimal. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
fd27450ae0
commit
82438a2cf6
1 changed files with 11 additions and 14 deletions
|
|
@ -463,21 +463,18 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint64_t time)
|
|||
|
||||
tp_filter_motion(tp, &dx, &dy, time);
|
||||
|
||||
if (tp->scroll.state == SCROLL_STATE_NONE) {
|
||||
/* Require at least one px scrolling to start */
|
||||
if (dx <= -1.0 || dx >= 1.0) {
|
||||
tp->scroll.state = SCROLL_STATE_SCROLLING;
|
||||
tp->scroll.direction |= (1 << LIBINPUT_POINTER_AXIS_HORIZONTAL_SCROLL);
|
||||
}
|
||||
|
||||
if (dy <= -1.0 || dy >= 1.0) {
|
||||
tp->scroll.state = SCROLL_STATE_SCROLLING;
|
||||
tp->scroll.direction |= (1 << LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL);
|
||||
}
|
||||
|
||||
if (tp->scroll.state == SCROLL_STATE_NONE)
|
||||
return;
|
||||
/* Require at least three px scrolling to start */
|
||||
if (dy <= -3.0 || dy >= 3.0) {
|
||||
tp->scroll.state = SCROLL_STATE_SCROLLING;
|
||||
tp->scroll.direction |= (1 << LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL);
|
||||
}
|
||||
if (dx <= -3.0 || dx >= 3.0) {
|
||||
tp->scroll.state = SCROLL_STATE_SCROLLING;
|
||||
tp->scroll.direction |= (1 << LIBINPUT_POINTER_AXIS_HORIZONTAL_SCROLL);
|
||||
}
|
||||
|
||||
if (tp->scroll.state == SCROLL_STATE_NONE)
|
||||
return;
|
||||
|
||||
/* Stop spurious MOTION events at the end of scrolling */
|
||||
tp_for_each_touch(tp, t)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue