libinput 1.5.0

This commit is contained in:
Peter Hutterer 2016-09-14 16:09:47 +10:00
parent 9ddff3b1ac
commit fe775bd2e0
4 changed files with 7 additions and 117 deletions

1
.gitignore vendored
View File

@ -50,3 +50,4 @@
/libinput-1.4.1.tar.xz
/libinput-1.4.2.tar.xz
/libinput-1.4.901.tar.xz
/libinput-1.5.0.tar.xz

View File

@ -1,113 +0,0 @@
From d725d39ddd56166d1f6c24094b493777831a36c1 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 7 Sep 2016 08:18:33 +1000
Subject: [PATCH libinput] touchpad: require at least 3 events before enabling
trackpoint palm detection
Some trackpoints, notably the one on the Lenovo T460s have a tendency to send
the odd event even when they're not actually used. Trackpoint events trigger
palm detection (see 0210f1fee193) and thus effectively disable the touchpad,
causing the touchpad to appear nonresponsive.
Fix this by requiring at least 3 events from a trackpoint before palm
detection is enabled. For normal use it's hard enough to trigger a single
event anyway so this should not affect the normal use-case.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
src/evdev-mt-touchpad.c | 9 ++++++++-
src/evdev-mt-touchpad.h | 1 +
test/trackpoint.c | 26 ++++++++++++++++++++++++++
3 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 2354061..38b638b 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -1305,6 +1305,7 @@ tp_trackpoint_timeout(uint64_t now, void *data)
tp_tap_resume(tp, now);
tp->palm.trackpoint_active = false;
+ tp->palm.trackpoint_event_count = 0;
}
static void
@@ -1317,6 +1318,13 @@ tp_trackpoint_event(uint64_t time, struct libinput_event *event, void *data)
if (event->type == LIBINPUT_EVENT_POINTER_BUTTON)
return;
+ tp->palm.trackpoint_last_event_time = time;
+ tp->palm.trackpoint_event_count++;
+
+ /* Require at least three events before enabling palm detection */
+ if (tp->palm.trackpoint_event_count < 3)
+ return;
+
if (!tp->palm.trackpoint_active) {
tp_edge_scroll_stop_events(tp, time);
tp_gesture_cancel(tp, time);
@@ -1324,7 +1332,6 @@ tp_trackpoint_event(uint64_t time, struct libinput_event *event, void *data)
tp->palm.trackpoint_active = true;
}
- tp->palm.trackpoint_last_event_time = time;
libinput_timer_set(&tp->palm.trackpoint_timer,
time + DEFAULT_TRACKPOINT_ACTIVITY_TIMEOUT);
}
diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h
index de9bdb5..f4ad090 100644
--- a/src/evdev-mt-touchpad.h
+++ b/src/evdev-mt-touchpad.h
@@ -341,6 +341,7 @@ struct tp_dispatch {
struct libinput_event_listener trackpoint_listener;
struct libinput_timer trackpoint_timer;
uint64_t trackpoint_last_event_time;
+ uint32_t trackpoint_event_count;
bool monitor_trackpoint;
} palm;
diff --git a/test/trackpoint.c b/test/trackpoint.c
index b92b994..e9ba027 100644
--- a/test/trackpoint.c
+++ b/test/trackpoint.c
@@ -349,6 +349,31 @@ START_TEST(trackpoint_palmdetect_resume_touch)
}
END_TEST
+START_TEST(trackpoint_palmdetect_require_min_events)
+{
+ struct litest_device *trackpoint = litest_current_device();
+ struct litest_device *touchpad;
+ struct libinput *li = trackpoint->libinput;
+
+ touchpad = litest_add_device(li, LITEST_SYNAPTICS_I2C);
+ litest_drain_events(li);
+
+ /* A single event does not trigger palm detection */
+ litest_event(trackpoint, EV_REL, REL_X, 1);
+ litest_event(trackpoint, EV_REL, REL_Y, 1);
+ litest_event(trackpoint, EV_SYN, SYN_REPORT, 0);
+ libinput_dispatch(li);
+ litest_drain_events(li);
+
+ litest_touch_down(touchpad, 0, 30, 30);
+ litest_touch_move_to(touchpad, 0, 30, 30, 80, 80, 10, 1);
+ litest_touch_up(touchpad, 0);
+ litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION);
+
+ litest_delete_device(touchpad);
+}
+END_TEST
+
void
litest_setup_tests_trackpoint(void)
{
@@ -362,4 +387,5 @@ litest_setup_tests_trackpoint(void)
litest_add("trackpoint:palmdetect", trackpoint_palmdetect, LITEST_POINTINGSTICK, LITEST_ANY);
litest_add("trackpoint:palmdetect", trackpoint_palmdetect_resume_touch, LITEST_POINTINGSTICK, LITEST_ANY);
+ litest_add("trackpoint:palmdetect", trackpoint_palmdetect_require_min_events, LITEST_POINTINGSTICK, LITEST_ANY);
}
--
2.7.4

View File

@ -4,8 +4,8 @@
%global gitversion 58abea394
Name: libinput
Version: 1.4.901
Release: 2%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Version: 1.5.0
Release: 1%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Summary: Input device library
License: MIT
@ -20,7 +20,6 @@ Source0: http://www.freedesktop.org/software/libinput/libinput-%{version}
# Not upstream, keep until kernel 4.2 or 4.1.x with dbf3c37086
Patch01: 0001-touchpad-serial-synaptics-need-to-fake-new-touches-o.patch
Patch02: 0001-touchpad-require-at-least-3-events-before-enabling-t.patch
BuildRequires: git
BuildRequires: autoconf automake libtool pkgconfig
@ -98,6 +97,9 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
%changelog
* Wed Sep 14 2016 Peter Hutterer <peter.hutterer@redhat.com> 1.5.0-1
- libinput 1.5.0
* Thu Sep 08 2016 Peter Hutterer <peter.hutterer@redhat.com> 1.4.901-2
- Avoid spurious trackpoint events halting the touchpad (related #1364850)

View File

@ -1 +1 @@
c8c868a3151016c45505c1a9e4fb13dc libinput-1.4.901.tar.xz
26030dae25f1ac584b0e428c90473339 libinput-1.5.0.tar.xz