From d61d385951c5678ad18d495358abe952ce359ac9 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Sat, 10 Dec 2022 19:40:07 +0900 Subject: 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 --- 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 -- cgit v1.2.1