summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHector Martin <marcan@marcan.st>2022-12-10 19:40:07 +0900
committerHector Martin <marcan@marcan.st>2023-04-06 15:30:14 +0900
commitd61d385951c5678ad18d495358abe952ce359ac9 (patch)
tree81b40da9afddc35d1dfb9d544dfa7ca464abaf22
parent7ae3713a77734232fff6b45bdb1e3a38d36c300a (diff)
downloadlibinput-d61d385951c5678ad18d495358abe952ce359ac9.tar.gz
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>
-rw-r--r--src/evdev-mt-touchpad.c12
-rw-r--r--src/evdev.c3
-rw-r--r--test/litest.h4
-rw-r--r--test/test-touchpad.c6
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