whot pushed to libinput (f22). "Use physical values for the hystersis where possible (#1230462) (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Tue Jun 16 07:09:35 UTC 2015


From 5003f6ebc2769d027ac2ddcbc46ac1747e79ea92 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer at who-t.net>
Date: Tue, 16 Jun 2015 17:08:39 +1000
Subject: Use physical values for the hystersis where possible (#1230462)

- Disable right-edge palm detection when edge scrolling is active
  (fdo#90980)

diff --git a/0001-touchpad-disable-right-edge-palm-detection-for-edge-.patch b/0001-touchpad-disable-right-edge-palm-detection-for-edge-.patch
new file mode 100644
index 0000000..ff00b31
--- /dev/null
+++ b/0001-touchpad-disable-right-edge-palm-detection-for-edge-.patch
@@ -0,0 +1,101 @@
+From cd701f2d75a48e3bfc1e28cb087d7ddb607f60ba Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Tue, 16 Jun 2015 15:39:48 +1000
+Subject: [PATCH libinput] touchpad: disable right-edge palm detection for edge
+ scrolling
+
+Most scroll motions would be labelled a palm.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=90980
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ src/evdev-mt-touchpad-edge-scroll.c |  2 +-
+ src/evdev-mt-touchpad.c             |  3 +++
+ src/evdev-mt-touchpad.h             |  3 +++
+ test/touchpad.c                     | 21 +++++++++++++++++++++
+ 4 files changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/src/evdev-mt-touchpad-edge-scroll.c b/src/evdev-mt-touchpad-edge-scroll.c
+index f5cfa9d..56f1e8a 100644
+--- a/src/evdev-mt-touchpad-edge-scroll.c
++++ b/src/evdev-mt-touchpad-edge-scroll.c
+@@ -75,7 +75,7 @@ edge_event_to_str(enum scroll_event event)
+ 	return NULL;
+ }
+ 
+-static uint32_t
++uint32_t
+ tp_touch_get_edge(struct tp_dispatch *tp, struct tp_touch *t)
+ {
+ 	uint32_t edge = EDGE_NONE;
+diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
+index 293760d..356f9b9 100644
+--- a/src/evdev-mt-touchpad.c
++++ b/src/evdev-mt-touchpad.c
+@@ -558,6 +558,9 @@ tp_palm_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time)
+ 	    tp_button_is_inside_softbutton_area(tp, t))
+ 		return;
+ 
++	if (tp_touch_get_edge(tp, t) & EDGE_RIGHT)
++		return;
++
+ 	t->palm.state = PALM_EDGE;
+ 	t->palm.time = time;
+ 	t->palm.first = t->point;
+diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h
+index 04610af..9357969 100644
+--- a/src/evdev-mt-touchpad.h
++++ b/src/evdev-mt-touchpad.h
+@@ -399,6 +399,9 @@ tp_edge_scroll_stop_events(struct tp_dispatch *tp, uint64_t time);
+ int
+ tp_edge_scroll_touch_active(struct tp_dispatch *tp, struct tp_touch *t);
+ 
++uint32_t
++tp_touch_get_edge(struct tp_dispatch *tp, struct tp_touch *t);
++
+ int
+ tp_init_gesture(struct tp_dispatch *tp);
+ 
+diff --git a/test/touchpad.c b/test/touchpad.c
+index 8e68597..d6e3cf2 100644
+--- a/test/touchpad.c
++++ b/test/touchpad.c
+@@ -3330,6 +3330,26 @@ START_TEST(touchpad_palm_detect_at_edge)
+ }
+ END_TEST
+ 
++START_TEST(touchpad_no_palm_detect_at_edge_for_edge_scrolling)
++{
++	struct litest_device *dev = litest_current_device();
++	struct libinput *li = dev->libinput;
++
++	if (!touchpad_has_palm_detect_size(dev))
++		return;
++
++	enable_edge_scroll(dev);
++
++	litest_drain_events(li);
++
++	litest_touch_down(dev, 0, 99, 50);
++	litest_touch_move_to(dev, 0, 99, 50, 99, 70, 5, 0);
++	litest_touch_up(dev, 0);
++
++	litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_AXIS);
++}
++END_TEST
++
+ START_TEST(touchpad_palm_detect_at_bottom_corners)
+ {
+ 	struct litest_device *dev = litest_current_device();
+@@ -5232,6 +5252,7 @@ litest_setup_tests(void)
+ 	litest_add("touchpad:palm", touchpad_palm_detect_palm_stays_palm, LITEST_TOUCHPAD, LITEST_ANY);
+ 	litest_add("touchpad:palm", touchpad_palm_detect_no_palm_moving_into_edges, LITEST_TOUCHPAD, LITEST_ANY);
+ 	litest_add("touchpad:palm", touchpad_palm_detect_tap, LITEST_TOUCHPAD, LITEST_ANY);
++	litest_add("touchpad:palm", touchpad_no_palm_detect_at_edge_for_edge_scrolling, LITEST_TOUCHPAD, LITEST_CLICKPAD);
+ 
+ 	litest_add("touchpad:left-handed", touchpad_left_handed, LITEST_TOUCHPAD|LITEST_BUTTON, LITEST_CLICKPAD);
+ 	litest_add("touchpad:left-handed", touchpad_left_handed_clickpad, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD);
+-- 
+2.4.3
+
diff --git a/0001-touchpad-make-the-hysteresis-dependent-on-physical-d.patch b/0001-touchpad-make-the-hysteresis-dependent-on-physical-d.patch
new file mode 100644
index 0000000..cc76ca6
--- /dev/null
+++ b/0001-touchpad-make-the-hysteresis-dependent-on-physical-d.patch
@@ -0,0 +1,52 @@
+From f13fbc96e84b2bb78bb61886d79aaaeaf8a9b4a1 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Thu, 11 Jun 2015 16:31:00 +1000
+Subject: [PATCH libinput] touchpad: make the hysteresis dependent on physical
+ distance
+
+Some touchpads, e.g. the Cyapa in the Acer c720 have a small axis range
+([0, 870], [0, 470]), so the diagonal/magic value yields a hysteresis margin
+of 1 device unit. On that device, that's one-tenth of a millimeter, causing
+pointer motion just by holding the finger.
+
+For touchpads that provide a physical resolution, set the hysteresis axes to
+0.5mm and do away with the magic factor.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1230441
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+Reviewed-by: Hans de Goede <hdegoede at redhat.com>
+---
+ src/evdev-mt-touchpad.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
+index 34cc85d..c82d733 100644
+--- a/src/evdev-mt-touchpad.c
++++ b/src/evdev-mt-touchpad.c
+@@ -1492,10 +1492,18 @@ tp_init(struct tp_dispatch *tp,
+ 						       EV_ABS,
+ 						       ABS_MT_DISTANCE);
+ 
+-	tp->hysteresis_margin.x =
+-		diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
+-	tp->hysteresis_margin.y =
+-		diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
++	if (device->abs.fake_resolution) {
++		tp->hysteresis_margin.x =
++			diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
++		tp->hysteresis_margin.y =
++			diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR;
++	} else {
++		int 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;
++	}
+ 
+ 	if (tp_init_accel(tp, diagonal) != 0)
+ 		return -1;
+-- 
+2.4.3
+
diff --git a/libinput.spec b/libinput.spec
index 6a1b39c..3f120e5 100644
--- a/libinput.spec
+++ b/libinput.spec
@@ -5,7 +5,7 @@
 
 Name:           libinput
 Version:        0.17.0
-Release:        4%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
+Release:        5%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
 Summary:        Input device library
 
 License:        MIT
@@ -21,6 +21,8 @@ Source0:        http://www.freedesktop.org/software/libinput/libinput-%{version}
 Patch01:        0001-filter-require-minimum-acceleration-factor-of-0.3.patch
 Patch02:        0001-touchpad-fix-pinned-finger-drifting.patch
 Patch03:        0001-touchpad-set-the-finger-pin-distance-to-5mm-where-po.patch
+Patch04:        0001-touchpad-disable-right-edge-palm-detection-for-edge-.patch
+Patch05:        0001-touchpad-make-the-hysteresis-dependent-on-physical-d.patch
 
 BuildRequires:  git
 BuildRequires:  autoconf automake libtool pkgconfig
@@ -98,6 +100,11 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
 
 
 %changelog
+* Tue Jun 16 2015 Peter Hutterer <peter.hutterer at redhat.com> 0.17.0-5
+- Use physical values for the hystersis where possible (#1230462)
+- Disable right-edge palm detection when edge scrolling is active
+  (fdo#90980)
+
 * Tue Jun 16 2015 Peter Hutterer <peter.hutterer at redhat.com> 0.17.0-4
 - Avoid erroneous finger movement after a physical click (#1230441)
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/libinput.git/commit/?h=f22&id=5003f6ebc2769d027ac2ddcbc46ac1747e79ea92


More information about the scm-commits mailing list