diff --git a/0001-evdev-Enable-natural-scrolling-by-default-on-Apple.patch b/0001-evdev-Enable-natural-scrolling-by-default-on-Apple.patch new file mode 100644 index 0000000..b5e8341 --- /dev/null +++ b/0001-evdev-Enable-natural-scrolling-by-default-on-Apple.patch @@ -0,0 +1,102 @@ +From d61d385951c5678ad18d495358abe952ce359ac9 Mon Sep 17 00:00:00 2001 +From: Hector Martin +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 +Signed-off-by: Peter Hutterer +--- + 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 + diff --git a/0001-touchpad-Disable-edge-palm-detection-Apple-touchpads.patch b/0001-touchpad-Disable-edge-palm-detection-Apple-touchpads.patch new file mode 100644 index 0000000..b36c371 --- /dev/null +++ b/0001-touchpad-Disable-edge-palm-detection-Apple-touchpads.patch @@ -0,0 +1,50 @@ +From 4a8b5e6ec445b507fc0b1ef9842a60bf13c58772 Mon Sep 17 00:00:00 2001 +From: Hector Martin +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 +Signed-off-by: Peter Hutterer +--- + 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 + diff --git a/libinput.spec b/libinput.spec index d27f639..b0879e1 100644 --- a/libinput.spec +++ b/libinput.spec @@ -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 - 1.23.0-2 +- Add two patches for better Apple touchpad behavior (see libinput MR + 834 and 897) + * Mon Mar 27 2023 Peter Hutterer - 1.23.0-1 - libinput 1.23.0