debian/changelog | 7 + debian/patches/fix-lp1696929.patch | 164 ------------------------------------- debian/patches/series | 1 3 files changed, 7 insertions(+), 165 deletions(-)
New commits: commit 6d75e0601fc74df73b684b0ed9f93374fcf6b716 Author: Timo Aaltonen <tjaal...@debian.org> Date: Mon Dec 18 00:23:17 2017 +0200 release to sid diff --git a/debian/changelog b/debian/changelog index 0a3cf06..bb32e9a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libinput (1.9.4-2) UNRELEASED; urgency=medium +libinput (1.9.4-2) unstable; urgency=medium * Drop the patch, it doesn't work well enough detecting when to disable hysteresis. (Closes: #884599) - -- Timo Aaltonen <tjaal...@debian.org> Mon, 18 Dec 2017 00:22:16 +0200 + -- Timo Aaltonen <tjaal...@debian.org> Mon, 18 Dec 2017 00:22:44 +0200 libinput (1.9.4-1) unstable; urgency=medium commit 34d64210ad4977c475037c38129595c2504ce9ee Author: Timo Aaltonen <tjaal...@debian.org> Date: Mon Dec 18 00:22:39 2017 +0200 Drop the patch, it doesn't work well enough detecting when to disable hysteresis. (Closes: #884599) diff --git a/debian/changelog b/debian/changelog index 5df47d0..0a3cf06 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +libinput (1.9.4-2) UNRELEASED; urgency=medium + + * Drop the patch, it doesn't work well enough detecting when to + disable hysteresis. (Closes: #884599) + + -- Timo Aaltonen <tjaal...@debian.org> Mon, 18 Dec 2017 00:22:16 +0200 + libinput (1.9.4-1) unstable; urgency=medium * New upstream release. diff --git a/debian/patches/fix-lp1696929.patch b/debian/patches/fix-lp1696929.patch deleted file mode 100644 index c1b2d9e..0000000 --- a/debian/patches/fix-lp1696929.patch +++ /dev/null @@ -1,164 +0,0 @@ -Description: touchpad: automatically disable the hysteresis where not required - Touchpads that require the hysteresis do not have filtering in the firmware - and holding a finger still causes continuous cursor movements. This implies - that we get a continuous stream of events with motion data. - . - If the finger is on the touchpad but we don't see any motion, the finger is - stationary and the touchpad firmware does filtering. In that case, we don't - need to add a hysteresis on top. -Author: Peter Hutterer <peter.hutte...@who-t.net> -Reviewed-by: Daniel van Vugt <daniel.van.v...@canonical.com> -Origin: upstream, https://cgit.freedesktop.org/wayland/libinput/commit/?id=aaded3d01d9e10e79543c7952aacd393487f9efc -Bug-Ubuntu: https://bugs.launchpad.net/bugs/1696929 -Bug: https://bugs.freedesktop.org/show_bug.cgi?id=98839 -Last-Update: 2017-12-13 - -Index: libinput-1.9.3-1ubuntu1/src/evdev-mt-touchpad.c -=================================================================== ---- libinput-1.9.3-1ubuntu1.orig/src/evdev-mt-touchpad.c -+++ libinput-1.9.3-1ubuntu1/src/evdev-mt-touchpad.c -@@ -132,21 +132,39 @@ tp_motion_history_push(struct tp_touch * - } - - static inline void -+tp_maybe_disable_hysteresis(struct tp_dispatch *tp, uint64_t time) -+{ -+ /* If the finger is down for 80ms without seeing motion events, -+ the firmware filters and we don't need a software hysteresis */ -+ if (time - tp->hysteresis.last_motion_time > ms2us(80)) { -+ tp->hysteresis.enabled = false; -+ evdev_log_debug(tp->device, "hysteresis disabled\n"); -+ return; -+ } -+ -+ if (tp->queued & TOUCHPAD_EVENT_MOTION) -+ tp->hysteresis.last_motion_time = time; -+} -+ -+static inline void - tp_motion_hysteresis(struct tp_dispatch *tp, - struct tp_touch *t) - { - int x = t->point.x, - y = t->point.y; - -+ if (!tp->hysteresis.enabled) -+ return; -+ - if (t->history.count == 0) { - t->hysteresis_center = t->point; - } else { - x = evdev_hysteresis(x, - t->hysteresis_center.x, -- tp->hysteresis_margin.x); -+ tp->hysteresis.margin.x); - y = evdev_hysteresis(y, - t->hysteresis_center.y, -- tp->hysteresis_margin.y); -+ tp->hysteresis.margin.y); - t->hysteresis_center.x = x; - t->hysteresis_center.y = y; - t->point.x = x; -@@ -273,6 +291,7 @@ tp_begin_touch(struct tp_dispatch *tp, s - t->thumb.first_touch_time = time; - t->tap.is_thumb = false; - assert(tp->nfingers_down >= 1); -+ tp->hysteresis.last_motion_time = time; - } - - /** -@@ -1531,6 +1550,9 @@ static void - tp_handle_state(struct tp_dispatch *tp, - uint64_t time) - { -+ if (tp->hysteresis.enabled) -+ tp_maybe_disable_hysteresis(tp, time); -+ - tp_process_state(tp, time); - tp_post_events(tp, time); - tp_post_process_state(tp, time); -@@ -2917,8 +2939,9 @@ tp_init_hysteresis(struct tp_dispatch *t - - res_x = tp->device->abs.absinfo_x->resolution; - res_y = tp->device->abs.absinfo_y->resolution; -- tp->hysteresis_margin.x = res_x/2; -- tp->hysteresis_margin.y = res_y/2; -+ tp->hysteresis.margin.x = res_x/2; -+ tp->hysteresis.margin.y = res_y/2; -+ tp->hysteresis.enabled = true; - } - - static void -Index: libinput-1.9.3-1ubuntu1/src/evdev-mt-touchpad.h -=================================================================== ---- libinput-1.9.3-1ubuntu1.orig/src/evdev-mt-touchpad.h -+++ libinput-1.9.3-1ubuntu1/src/evdev-mt-touchpad.h -@@ -269,7 +269,12 @@ struct tp_dispatch { - double orientation_to_angle; - } touch_size; - -- struct device_coords hysteresis_margin; -+ struct { -+ bool enabled; -+ struct device_coords margin; -+ unsigned int other_event_count; -+ uint64_t last_motion_time; -+ } hysteresis; - - struct { - double x_scale_coeff; -Index: libinput-1.9.3-1ubuntu1/src/evdev.h -=================================================================== ---- libinput-1.9.3-1ubuntu1.orig/src/evdev.h -+++ libinput-1.9.3-1ubuntu1/src/evdev.h -@@ -620,6 +620,19 @@ evdev_to_left_handed(struct evdev_device - * calculation to do circular hysteresis are nontrivial, especially since - * many touchpads have uneven x/y resolutions. - * -+ * Given coordinates, 0, 1, 2, ... this is what we return for a margin of 3 -+ * and a center of 0: -+ * -+ * Input: 1 2 3 4 5 6 5 4 3 2 1 0 -1 -+ * Coord: 0 0 0 1 2 3 3 3 3 3 3 3 2 -+ * Center: 0 0 0 1 2 3 3 3 3 3 3 3 2 -+ * -+ * Problem: viewed from a stationary finger that starts moving, the -+ * hysteresis margin is M in both directions. Once we start moving -+ * continuously though, the margin is 0 in the movement direction and 2*M to -+ * change direction. That makes the finger less responsive to directional -+ * changes than to the original movement. -+ * - * @param in The input coordinate - * @param center Current center of the hysteresis - * @param margin Hysteresis width (on each side) -Index: libinput-1.9.3-1ubuntu1/test/litest.c -=================================================================== ---- libinput-1.9.3-1ubuntu1.orig/test/litest.c -+++ libinput-1.9.3-1ubuntu1/test/litest.c -@@ -3252,6 +3252,12 @@ litest_timeout_tablet_proxout(void) - } - - void -+litest_timeout_hysteresis(void) -+{ -+ msleep(90); -+} -+ -+void - litest_push_event_frame(struct litest_device *dev) - { - litest_assert(dev->skip_ev_syn >= 0); -Index: libinput-1.9.3-1ubuntu1/test/litest.h -=================================================================== ---- libinput-1.9.3-1ubuntu1.orig/test/litest.h -+++ libinput-1.9.3-1ubuntu1/test/litest.h -@@ -768,6 +768,9 @@ void - litest_timeout_tablet_proxout(void); - - void -+litest_timeout_hysteresis(void); -+ -+void - litest_push_event_frame(struct litest_device *dev); - - void diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index f34d61a..0000000 --- a/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -fix-lp1696929.patch