diff --git a/.gitignore b/.gitignore index d3a5b6f..8cfc779 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,8 @@ /libinput-1.1.5.tar.xz /libinput-1.1.6.tar.xz /libinput-1.1.7.tar.xz +/libinput-1.1.8.tar.xz +/libinput-1.2.1.tar.xz +/libinput-1.2.2.tar.xz +/libinput-1.2.3.tar.xz +/libinput-1.2.4.tar.xz diff --git a/0001-Make-a-link-to-the-html-docs-available-as-a-define.patch b/0001-Make-a-link-to-the-html-docs-available-as-a-define.patch new file mode 100644 index 0000000..7b809e1 --- /dev/null +++ b/0001-Make-a-link-to-the-html-docs-available-as-a-define.patch @@ -0,0 +1,66 @@ +From e968549f2c4f1d51a921ed4997fc9151d0d91ccb Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 27 Apr 2016 11:32:02 +1000 +Subject: [PATCH libinput] Make a link to the html docs available as a #define + +The "latest" documentation link is the location for the master branch, +released versions have their own directory on the server. + +The micro-versions of 90 and above are used for snapshots and release +candidates, so whenever we have a micro version of >= 90 we still want to link +to the "latest" documentation. In all other cases, we link to the current +release. + +Signed-off-by: Peter Hutterer +Reviewed-by: Benjamin Tissoires +Reviewed-by: Hans de Goede +(cherry picked from commit 4fdaa1b2a96d5d9e7d121fc7082737cc581e8020) +--- + configure.ac | 4 ++++ + src/libinput-private.h | 8 ++++++++ + 2 files changed, 12 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 602a860..77270fa 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -17,6 +17,10 @@ AC_SUBST([LIBINPUT_VERSION_MINOR], [libinput_minor_version]) + AC_SUBST([LIBINPUT_VERSION_MICRO], [libinput_micro_version]) + AC_SUBST([LIBINPUT_VERSION], [libinput_version]) + ++AC_DEFINE([LIBINPUT_VERSION_MAJOR], [libinput_major_version], "libinput major version number") ++AC_DEFINE([LIBINPUT_VERSION_MINOR], [libinput_minor_version], "libinput minor version number") ++AC_DEFINE([LIBINPUT_VERSION_MICRO], [libinput_micro_version], "libinput micro version number") ++ + AC_CONFIG_HEADERS([config.h]) + AC_CONFIG_MACRO_DIR([m4]) + +diff --git a/src/libinput-private.h b/src/libinput-private.h +index 8d2492a..f89ca2e 100644 +--- a/src/libinput-private.h ++++ b/src/libinput-private.h +@@ -25,6 +25,8 @@ + #ifndef LIBINPUT_PRIVATE_H + #define LIBINPUT_PRIVATE_H + ++#include "config.h" ++ + #include + #include + +@@ -33,6 +35,12 @@ + #include "libinput.h" + #include "libinput-util.h" + ++#if LIBINPUT_VERSION_MICRO >= 90 ++#define HTTP_DOC_LINK "https://wayland.freedesktop.org/libinput/doc/latest/" ++#else ++#define HTTP_DOC_LINK "https://wayland.freedesktop.org/libinput/doc/" VERSION "/" ++#endif ++ + struct libinput_source; + + /* A coordinate pair in device coordinates */ +-- +2.7.4 + diff --git a/0001-touchpad-add-LIBINPUT_MODEL_WOBBLY_TOUCHPAD-for-the-.patch b/0001-touchpad-add-LIBINPUT_MODEL_WOBBLY_TOUCHPAD-for-the-.patch new file mode 100644 index 0000000..7a843bd --- /dev/null +++ b/0001-touchpad-add-LIBINPUT_MODEL_WOBBLY_TOUCHPAD-for-the-.patch @@ -0,0 +1,81 @@ +From 71841c822cb3cc7069f6a1a834b005fdf0403c69 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Tue, 12 Apr 2016 11:07:02 +1000 +Subject: [PATCH libinput] touchpad: add LIBINPUT_MODEL_WOBBLY_TOUCHPAD for the + HP 14-ac157tu + +If some elantech touchpads require a hysteresis, let's use some more generic +tag for those touchpads that require correct handling of pointer wobbles. + +https://bugs.freedesktop.org/show_bug.cgi?id=94897 + +Signed-off-by: Peter Hutterer +Reviewed-by: Hans de Goede +(cherry picked from commit afdcaf50157c0a76389740885bed3719b758dc37) +--- + src/evdev-mt-touchpad.c | 3 +++ + src/evdev.c | 1 + + src/evdev.h | 1 + + udev/90-libinput-model-quirks.hwdb | 8 ++++++++ + 4 files changed, 13 insertions(+) + +diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c +index c50f52d..a92e60b 100644 +--- a/src/evdev-mt-touchpad.c ++++ b/src/evdev-mt-touchpad.c +@@ -2046,6 +2046,9 @@ tp_init_hysteresis(struct tp_dispatch *tp) + (tp->device->model_flags & EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD)) + goto want_hysteresis; + ++ if (tp->device->model_flags & EVDEV_MODEL_WOBBLY_TOUCHPAD) ++ goto want_hysteresis; ++ + tp->hysteresis_margin.x = 0; + tp->hysteresis_margin.y = 0; + +diff --git a/src/evdev.c b/src/evdev.c +index 6bb8986..f0311c6 100644 +--- a/src/evdev.c ++++ b/src/evdev.c +@@ -1681,6 +1681,7 @@ evdev_read_model_flags(struct evdev_device *device) + { "LIBINPUT_MODEL_CYAPA", EVDEV_MODEL_CYAPA }, + { "LIBINPUT_MODEL_ALPS_RUSHMORE", EVDEV_MODEL_ALPS_RUSHMORE }, + { "LIBINPUT_MODEL_LENOVO_T450_TOUCHPAD", EVDEV_MODEL_LENOVO_T450_TOUCHPAD }, ++ { "LIBINPUT_MODEL_WOBBLY_TOUCHPAD", EVDEV_MODEL_WOBBLY_TOUCHPAD }, + { NULL, EVDEV_MODEL_DEFAULT }, + }; + const struct model_map *m = model_map; +diff --git a/src/evdev.h b/src/evdev.h +index 4a5d807..3a7693e 100644 +--- a/src/evdev.h ++++ b/src/evdev.h +@@ -114,6 +114,7 @@ enum evdev_device_model { + EVDEV_MODEL_CYAPA = (1 << 15), + EVDEV_MODEL_ALPS_RUSHMORE = (1 << 16), + EVDEV_MODEL_LENOVO_T450_TOUCHPAD= (1 << 17), ++ EVDEV_MODEL_WOBBLY_TOUCHPAD = (1 << 18), + }; + + struct mt_slot { +diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb +index 242c444..91ac243 100644 +--- a/udev/90-libinput-model-quirks.hwdb ++++ b/udev/90-libinput-model-quirks.hwdb +@@ -81,6 +81,14 @@ libinput:name:Cypress APA Trackpad ?cyapa?:dmi:* + LIBINPUT_MODEL_CYAPA=1 + + ########################################## ++# HP ++########################################## ++ ++# HP 14-ac157tu ++libinput:name:*ETPS/2 Elantech Touchpad*:dmi:*svnHP*pvrCNB1:* ++ LIBINPUT_MODEL_WOBBLY_TOUCHPAD=1 ++ ++########################################## + # LENOVO + ########################################## + +-- +2.7.4 + diff --git a/0001-touchpad-detect-and-warn-about-kernel-tracking-point.patch b/0001-touchpad-detect-and-warn-about-kernel-tracking-point.patch new file mode 100644 index 0000000..9d486fb --- /dev/null +++ b/0001-touchpad-detect-and-warn-about-kernel-tracking-point.patch @@ -0,0 +1,210 @@ +From 1814c8586b62000caab91c5af40f7c5a0a80c384 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Tue, 16 Sep 2014 15:13:00 +1000 +Subject: [PATCH libinput] touchpad: detect and warn about kernel tracking + pointer jumps + +If a touch moves by more than 20mm within a single frame, reset the motion +history, effectively discarding the movement. This is a relatively common bug +and almost always needs a kernel fix, so add an explanatory page to the docs. + +Signed-off-by: Peter Hutterer +Reviewed-by: Benjamin Tissoires +Reviewed-by: Hans de Goede +(cherry picked from commit 6a22eed4efa2a18664d62c6d8131c05258f869ab) +--- + doc/Makefile.am | 1 + + doc/page-hierarchy.dox | 1 + + doc/touchpad-jumping-cursors.dox | 54 ++++++++++++++++++++++++++++++++++++++++ + src/evdev-mt-touchpad.c | 27 ++++++++++++++++++++ + test/touchpad.c | 39 +++++++++++++++++++++++++++++ + 5 files changed, 122 insertions(+) + create mode 100644 doc/touchpad-jumping-cursors.dox + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 7a7c6cf..f56ed6a 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -27,6 +27,7 @@ header_files = \ + $(srcdir)/tapping.dox \ + $(srcdir)/test-suite.dox \ + $(srcdir)/tools.dox \ ++ $(srcdir)/touchpad-jumping-cursors.dox \ + $(srcdir)/touchpads.dox + + diagram_files = \ +diff --git a/doc/page-hierarchy.dox b/doc/page-hierarchy.dox +index 1351a5e..e47e98e 100644 +--- a/doc/page-hierarchy.dox ++++ b/doc/page-hierarchy.dox +@@ -7,6 +7,7 @@ + - @subpage gestures + - @subpage palm_detection + - @subpage t440_support ++- @subpage touchpad_jumping_cursor + + @page touchscreens Touchscreens + +diff --git a/doc/touchpad-jumping-cursors.dox b/doc/touchpad-jumping-cursors.dox +new file mode 100644 +index 0000000..e581eb1 +--- /dev/null ++++ b/doc/touchpad-jumping-cursors.dox +@@ -0,0 +1,54 @@ ++/** ++@page touchpad_jumping_cursor Touchpad jumping cursor bugs ++ ++A common bug encountered on touchpads is a cursor jump when alternating ++between fingers on a multi-touch-capable touchpad. For example, after moving ++the cursor a user may use a second finger in the software button area to ++physically click the touchpad. Upon setting the finger down, the cursor ++exhibits a jump towards the bottom left or right, depending on the finger ++position. ++ ++When libinput detects a cursor jump it prints a bug warning to the log with ++the text "Touch jump detected and discarded." and a link to this page. ++ ++In most cases, this is a bug in the kernel driver and to libinput it appears ++that the touch point moves from its previous position. The pointer jump can ++usually be seen in the evemu-record output for the device: ++ ++
++ E: 249.206319 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
++ E: 249.218008 0003 0035 3764    # EV_ABS / ABS_MT_POSITION_X    3764
++ E: 249.218008 0003 0036 2221    # EV_ABS / ABS_MT_POSITION_Y    2221
++ E: 249.218008 0003 003a 0065    # EV_ABS / ABS_MT_PRESSURE      65
++ E: 249.218008 0003 0000 3764    # EV_ABS / ABS_X                3764
++ E: 249.218008 0003 0001 2216    # EV_ABS / ABS_Y                2216
++ E: 249.218008 0003 0018 0065    # EV_ABS / ABS_PRESSURE         65
++ E: 249.218008 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
++ E: 249.230881 0003 0035 3752    # EV_ABS / ABS_MT_POSITION_X    3752
++ E: 249.230881 0003 003a 0046    # EV_ABS / ABS_MT_PRESSURE      46
++ E: 249.230881 0003 0000 3758    # EV_ABS / ABS_X                3758
++ E: 249.230881 0003 0018 0046    # EV_ABS / ABS_PRESSURE         46
++ E: 249.230881 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
++ E: 249.242648 0003 0035 1640    # EV_ABS / ABS_MT_POSITION_X    1640
++ E: 249.242648 0003 0036 4681    # EV_ABS / ABS_MT_POSITION_Y    4681
++ E: 249.242648 0003 003a 0025    # EV_ABS / ABS_MT_PRESSURE      25
++ E: 249.242648 0003 0000 1640    # EV_ABS / ABS_X                1640
++ E: 249.242648 0003 0001 4681    # EV_ABS / ABS_Y                4681
++ E: 249.242648 0003 0018 0025    # EV_ABS / ABS_PRESSURE         25
++ E: 249.242648 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
++ E: 249.254568 0003 0035 1648    # EV_ABS / ABS_MT_POSITION_X    1648
++ E: 249.254568 0003 003a 0027    # EV_ABS / ABS_MT_PRESSURE      27
++ E: 249.254568 0003 0000 1644    # EV_ABS / ABS_X                1644
++ E: 249.254568 0003 0018 0027    # EV_ABS / ABS_PRESSURE         27
++
++ ++In this recording, the pointer jumps from its position 3752/2216 to ++1640/4681 within a single frame. On this particular touchpad, this would ++represent a physical move of almost 50mm. libinput detects some of these ++jumps and discards the movement but otherwise continues as usual. However, ++the bug should be fixed at the kernel level. ++ ++When you encounter the warning in the log, please generate an evemu ++recording of your touchpad and file a bug. See @ref reporting_bugs for more ++details. ++*/ +diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c +index 2ab6fd3..c50f52d 100644 +--- a/src/evdev-mt-touchpad.c ++++ b/src/evdev-mt-touchpad.c +@@ -918,6 +918,25 @@ tp_need_motion_history_reset(struct tp_dispatch *tp, uint64_t time) + return rc; + } + ++static bool ++tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t) ++{ ++ struct device_coords *last; ++ double dx, dy; ++ const int JUMP_THRESHOLD_MM = 20; ++ ++ if (t->history.count == 0) ++ return false; ++ ++ /* called before tp_motion_history_push, so offset 0 is the most ++ * recent coordinate */ ++ last = tp_motion_history_offset(t, 0); ++ dx = fabs(t->point.x - last->x) / tp->device->abs.absinfo_x->resolution; ++ dy = fabs(t->point.y - last->y) / tp->device->abs.absinfo_y->resolution; ++ ++ return hypot(dx, dy) > JUMP_THRESHOLD_MM; ++} ++ + static void + tp_process_state(struct tp_dispatch *tp, uint64_t time) + { +@@ -946,6 +965,14 @@ tp_process_state(struct tp_dispatch *tp, uint64_t time) + if (!t->dirty) + continue; + ++ if (tp_detect_jumps(tp, t)) { ++ log_bug_kernel(tp_libinput_context(tp), ++ "Touch jump detected and discarded.\n" ++ "See %stouchpad_jumping_cursor for details\n", ++ HTTP_DOC_LINK); ++ tp_motion_history_reset(t); ++ } ++ + tp_thumb_detect(tp, t, time); + tp_palm_detect(tp, t, time); + +diff --git a/test/touchpad.c b/test/touchpad.c +index be9c566..8744cbd 100644 +--- a/test/touchpad.c ++++ b/test/touchpad.c +@@ -3958,6 +3958,43 @@ START_TEST(touchpad_time_usec) + } + END_TEST + ++START_TEST(touchpad_jump_finger_motion) ++{ ++ struct litest_device *dev = litest_current_device(); ++ struct libinput *li = dev->libinput; ++ struct libinput_event *event; ++ struct libinput_event_pointer *ptrev; ++ ++ litest_touch_down(dev, 0, 20, 30); ++ litest_touch_move_to(dev, 0, 20, 30, 90, 30, 10, 0); ++ litest_drain_events(li); ++ ++ litest_disable_log_handler(li); ++ litest_touch_move_to(dev, 0, 90, 30, 20, 80, 1, 0); ++ litest_assert_empty_queue(li); ++ litest_restore_log_handler(li); ++ ++ litest_touch_move_to(dev, 0, 20, 80, 21, 81, 10, 0); ++ litest_touch_up(dev, 0); ++ ++ /* expect lots of little events, no big jump */ ++ libinput_dispatch(li); ++ event = libinput_get_event(li); ++ do { ++ double dx, dy; ++ ++ ptrev = litest_is_motion_event(event); ++ dx = libinput_event_pointer_get_dx(ptrev); ++ dy = libinput_event_pointer_get_dy(ptrev); ++ ck_assert_int_lt(abs(dx), 20); ++ ck_assert_int_lt(abs(dy), 20); ++ ++ libinput_event_destroy(event); ++ event = libinput_get_event(li); ++ } while (event != NULL); ++} ++END_TEST ++ + void + litest_setup_tests(void) + { +@@ -4077,4 +4114,6 @@ litest_setup_tests(void) + litest_add_for_device("touchpad:bugs", touchpad_tool_tripletap_touch_count, LITEST_SYNAPTICS_TOPBUTTONPAD); + + litest_add("touchpad:time", touchpad_time_usec, LITEST_TOUCHPAD, LITEST_ANY); ++ ++ litest_add_for_device("touchpad:jumps", touchpad_jump_finger_motion, LITEST_SYNAPTICS_CLICKPAD); + } +-- +2.7.4 + diff --git a/0001-udev-mark-ALPS-touchpads-fw-version-300-as-wobbly-to.patch b/0001-udev-mark-ALPS-touchpads-fw-version-300-as-wobbly-to.patch new file mode 100644 index 0000000..c009043 --- /dev/null +++ b/0001-udev-mark-ALPS-touchpads-fw-version-300-as-wobbly-to.patch @@ -0,0 +1,35 @@ +From 31b1e9e619ebe3281a4659590d7318225b81bd97 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Thu, 19 May 2016 14:40:33 +1000 +Subject: [PATCH libinput] udev: mark ALPS touchpads fw version 300 as wobbly + touchpads + +Includes the Dell Lattitude E5420 but since all alps touchpads with the same +fw version are the same (as far as we know) hooking this off the firmware +version should cover this generation. + +https://bugzilla.redhat.com/show_bug.cgi?id=1336084 + +Signed-off-by: Peter Hutterer +--- + udev/90-libinput-model-quirks.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb +index 147fec2..305fed0 100644 +--- a/udev/90-libinput-model-quirks.hwdb ++++ b/udev/90-libinput-model-quirks.hwdb +@@ -26,6 +26,10 @@ libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:800 + libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:800 + LIBINPUT_ATTR_SIZE_HINT=100x55 + ++libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:300 ++libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:300 ++ LIBINPUT_MODEL_WOBBLY_TOUCHPAD=1 ++ + libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:310 + libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:310 + LIBINPUT_MODEL_ALPS_RUSHMORE=1 +-- +2.7.4 + diff --git a/libinput.spec b/libinput.spec index 8f15c3a..a51d5ec 100644 --- a/libinput.spec +++ b/libinput.spec @@ -4,8 +4,8 @@ %global gitversion 58abea394 Name: libinput -Version: 1.1.7 -Release: 1%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} +Version: 1.2.4 +Release: 4%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} Summary: Input device library License: MIT @@ -20,12 +20,18 @@ 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-Make-a-link-to-the-html-docs-available-as-a-define.patch +Patch03: 0001-touchpad-detect-and-warn-about-kernel-tracking-point.patch + +# https://bugzilla.redhat.com/show_bug.cgi?id=1336084 +Patch04: 0001-touchpad-add-LIBINPUT_MODEL_WOBBLY_TOUCHPAD-for-the-.patch +Patch05: 0001-udev-mark-ALPS-touchpads-fw-version-300-as-wobbly-to.patch BuildRequires: git BuildRequires: autoconf automake libtool pkgconfig BuildRequires: libevdev-devel BuildRequires: libudev-devel -BuildRequires: mtdev-devel +BuildRequires: mtdev-devel libwacom-devel BuildRequires: pkgconfig(udev) %description @@ -97,6 +103,39 @@ find $RPM_BUILD_ROOT -name '*.la' -delete %changelog +* Mon May 23 2016 Peter Hutterer 1.2.4-4 +- Fix pointer jitter on ALPS FW v300 (#1336084) + +* Fri May 20 2016 Peter Hutterer 1.2.4-3 +- Fix pointer jitter on the Dell E5420 (#1336084) + +* Thu May 12 2016 Peter Hutterer 1.2.4-2 +- discard large cursor jumps (#1335307) + +* Tue Apr 19 2016 Peter Hutterer 1.2.4-1 +- libinput 1.2.4 + +* Tue Apr 12 2016 Peter Hutterer 1.2.3-1 +- libinput 1.2.3 + +* Tue Mar 15 2016 Peter Hutterer 1.2.2-1 +- libinput 1.2.2 + +* Fri Mar 11 2016 Peter Hutterer 1.2.1-4 +- Fix jerky pointer motion on the Lenovo T450/T460/X1 3rd hardware + +* Mon Mar 07 2016 Peter Hutterer 1.2.1-3 +- Fix segfault on mislabeled tablets (#1314955) + +* Wed Mar 02 2016 Peter Hutterer 1.2.1-2 +- Add libwacom-devel to BuildRequires + +* Wed Mar 02 2016 Peter Hutterer 1.2.1-1 +- libinput 1.2.1 + +* Thu Feb 18 2016 Peter Hutterer 1.1.8-1 +- libinput 1.1.8 + * Wed Feb 10 2016 Peter Hutterer 1.1.7-1 - libinput 1.1.7 diff --git a/sources b/sources index 360d317..379965a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a501715a6135ac1f772bb5f3e3183481 libinput-1.1.7.tar.xz +1cbaa34f04a336f2703906d564e0a37a libinput-1.2.4.tar.xz