Add two patches for better Apple touchpad behavior (see libinput MR

834 and 897)
This commit is contained in:
Peter Hutterer 2023-04-11 10:20:03 +10:00
parent a6cac42be5
commit 37e9aa1136
3 changed files with 160 additions and 1 deletions

View File

@ -0,0 +1,102 @@
From d61d385951c5678ad18d495358abe952ce359ac9 Mon Sep 17 00:00:00 2001
From: Hector Martin <marcan@marcan.st>
Date: Sat, 10 Dec 2022 19:40:07 +0900
Subject: [PATCH] evdev: Enable natural scrolling by default on Apple
As suggested by the comment itself. I think most users expect this.
Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
src/evdev-mt-touchpad.c | 12 ++++++++++++
src/evdev.c | 3 +--
test/litest.h | 4 ++++
test/test-touchpad.c | 6 ++++--
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index b29a5c56..e2ecdea7 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -3137,12 +3137,24 @@ tp_scroll_config_scroll_method_get_default_method(struct libinput_device *device
return tp_scroll_get_default_method(tp);
}
+static int
+tp_scroll_config_natural_get_default(struct libinput_device *device)
+{
+ struct evdev_device *dev = evdev_device(device);
+
+ return (evdev_device_has_model_quirk(dev, QUIRK_MODEL_APPLE_TOUCHPAD) ||
+ evdev_device_has_model_quirk(dev, QUIRK_MODEL_APPLE_TOUCHPAD_ONEBUTTON));
+}
+
static void
tp_init_scroll(struct tp_dispatch *tp, struct evdev_device *device)
{
tp_edge_scroll_init(tp, device);
evdev_init_natural_scroll(device);
+ /* Override natural scroll config for Apple touchpads */
+ device->scroll.config_natural.get_default_enabled = tp_scroll_config_natural_get_default;
+ device->scroll.natural_scrolling_enabled = tp_scroll_config_natural_get_default(&device->base);
tp->scroll.config_method.get_methods = tp_scroll_config_scroll_method_get_methods;
tp->scroll.config_method.set_method = tp_scroll_config_scroll_method_set_method;
diff --git a/src/evdev.c b/src/evdev.c
index 524ae9a1..33b3f514 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -957,8 +957,7 @@ evdev_scroll_config_natural_get(struct libinput_device *device)
static int
evdev_scroll_config_natural_get_default(struct libinput_device *device)
{
- /* could enable this on Apple touchpads. could do that, could
- * very well do that... */
+ /* Overridden in evdev-mt-touchpad.c for Apple touchpads. */
return 0;
}
diff --git a/test/litest.h b/test/litest.h
index baba5cbb..95150831 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -1064,6 +1064,8 @@ litest_enable_2fg_scroll(struct litest_device *dev)
expected = LIBINPUT_CONFIG_STATUS_SUCCESS;
litest_assert_int_eq(status, expected);
+
+ libinput_device_config_scroll_set_natural_scroll_enabled(device, 0);
}
static inline void
@@ -1077,6 +1079,8 @@ litest_enable_edge_scroll(struct litest_device *dev)
expected = LIBINPUT_CONFIG_STATUS_SUCCESS;
litest_assert_int_eq(status, expected);
+
+ libinput_device_config_scroll_set_natural_scroll_enabled(device, 0);
}
static inline bool
diff --git a/test/test-touchpad.c b/test/test-touchpad.c
index c02cb01c..d72ae0fa 100644
--- a/test/test-touchpad.c
+++ b/test/test-touchpad.c
@@ -611,9 +611,11 @@ START_TEST(touchpad_scroll_natural_defaults)
{
struct litest_device *dev = litest_current_device();
+ int enabled = libevdev_get_id_vendor(dev->evdev) == VENDOR_ID_APPLE;
+
ck_assert_int_ge(libinput_device_config_scroll_has_natural_scroll(dev->libinput_device), 1);
- ck_assert_int_eq(libinput_device_config_scroll_get_natural_scroll_enabled(dev->libinput_device), 0);
- ck_assert_int_eq(libinput_device_config_scroll_get_default_natural_scroll_enabled(dev->libinput_device), 0);
+ ck_assert_int_eq(libinput_device_config_scroll_get_natural_scroll_enabled(dev->libinput_device), enabled);
+ ck_assert_int_eq(libinput_device_config_scroll_get_default_natural_scroll_enabled(dev->libinput_device), enabled);
}
END_TEST
--
2.40.0

View File

@ -0,0 +1,50 @@
From 4a8b5e6ec445b507fc0b1ef9842a60bf13c58772 Mon Sep 17 00:00:00 2001
From: Hector Martin <marcan@marcan.st>
Date: Thu, 6 Apr 2023 15:33:42 +0900
Subject: [PATCH] touchpad: Disable edge palm detection Apple touchpads
This hurts more than it helps, and users complain of dead trackpad
edges. Apple touchpads have fairly sophisticated internal palm rejection
algorithms going back many years, so let's just disable this one on
everything Apple.
Related to: #433 (need to figure out what other hardware may need this)
Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
src/evdev-mt-touchpad.c | 4 ++++
test/litest.h | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index e2ecdea7..5b040ce5 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -3350,6 +3350,10 @@ tp_init_palmdetect_edge(struct tp_dispatch *tp,
!tp_is_tpkb_combo_below(device))
return;
+ /* Edge palm detection hurts more than it helps on Apple touchpads. */
+ if (evdev_device_has_model_quirk(device, QUIRK_MODEL_APPLE_TOUCHPAD))
+ return;
+
evdev_device_get_size(device, &width, &height);
/* Enable edge palm detection on touchpads >= 70 mm. Anything
diff --git a/test/litest.h b/test/litest.h
index 95150831..457790b3 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -1287,7 +1287,7 @@ litest_has_palm_detect_size(struct litest_device *dev)
if (bustype == BUS_BLUETOOTH)
return 0;
if (vendor == VENDOR_ID_APPLE)
- return 1;
+ return 0;
rc = libinput_device_get_size(dev->libinput_device, &width, &height);
--
2.40.0

View File

@ -5,7 +5,7 @@
Name: libinput
Version: 1.23.0
Release: 1%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Release: 2%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist}
Summary: Input device library
License: MIT
@ -18,6 +18,9 @@ Source2: commitid
Source0: https://gitlab.freedesktop.org/libinput/libinput/-/archive/%{version}/libinput-%{version}.tar.bz2
%endif
Patch0001: 0001-evdev-Enable-natural-scrolling-by-default-on-Apple.patch
Patch0002: 0001-touchpad-Disable-edge-palm-detection-Apple-touchpads.patch
BuildRequires: git-core
BuildRequires: gcc
BuildRequires: meson
@ -153,6 +156,10 @@ intended to be run by users.
%changelog
* Tue Apr 11 2023 Peter Hutterer <peter.hutterer@redhat.com> - 1.23.0-2
- Add two patches for better Apple touchpad behavior (see libinput MR
834 and 897)
* Mon Mar 27 2023 Peter Hutterer <peter.hutterer@redhat.com> - 1.23.0-1
- libinput 1.23.0