From f6d61dc3147c2df297c117a23752c332abdb1288 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 11 Apr 2018 16:02:43 +1000 Subject: [PATCH] touchpad: allow custom profiles on touchpads Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad.c | 29 ++----------- test/test-pointer.c | 90 ++++++++++++++++++++++------------------- 2 files changed, 52 insertions(+), 67 deletions(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 7b6825c0..1fd37b49 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -2562,26 +2562,8 @@ tp_init_slots(struct tp_dispatch *tp, static uint32_t tp_accel_config_get_profiles(struct libinput_device *libinput_device) { - return LIBINPUT_CONFIG_ACCEL_PROFILE_NONE; -} - -static enum libinput_config_status -tp_accel_config_set_profile(struct libinput_device *libinput_device, - enum libinput_config_accel_profile profile) -{ - return LIBINPUT_CONFIG_STATUS_UNSUPPORTED; -} - -static enum libinput_config_accel_profile -tp_accel_config_get_profile(struct libinput_device *libinput_device) -{ - return LIBINPUT_CONFIG_ACCEL_PROFILE_NONE; -} - -static enum libinput_config_accel_profile -tp_accel_config_get_default_profile(struct libinput_device *libinput_device) -{ - return LIBINPUT_CONFIG_ACCEL_PROFILE_NONE; + return LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE | + LIBINPUT_CONFIG_ACCEL_PROFILE_DEVICE_SPEED_CURVE; } static bool @@ -2618,12 +2600,9 @@ tp_init_accel(struct tp_dispatch *tp) evdev_device_init_pointer_acceleration(tp->device, filter); - /* we override the profile hooks for accel configuration with hooks - * that don't allow selection of profiles */ + /* override the profile hooks for get_profile because we don't + * have the flat profile on touchpads */ device->pointer.config.get_profiles = tp_accel_config_get_profiles; - device->pointer.config.set_profile = tp_accel_config_set_profile; - device->pointer.config.get_profile = tp_accel_config_get_profile; - device->pointer.config.get_default_profile = tp_accel_config_get_default_profile; return true; } diff --git a/test/test-pointer.c b/test/test-pointer.c index d6ff4ffe..300c428b 100644 --- a/test/test-pointer.c +++ b/test/test-pointer.c @@ -1365,7 +1365,49 @@ START_TEST(pointer_accel_direction_change) } END_TEST +static inline void +verify_set_profile(struct libinput_device *device, + enum libinput_config_accel_profile profile) +{ + enum libinput_config_accel_profile p; + enum libinput_config_status status; + + status = libinput_device_config_accel_set_profile(device, profile); + ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); + p = libinput_device_config_accel_get_profile(device); + ck_assert_int_eq(profile, p); +} + START_TEST(pointer_accel_profile_defaults) +{ + struct litest_device *dev = litest_current_device(); + struct libinput_device *device = dev->libinput_device; + enum libinput_config_accel_profile profile; + uint32_t profiles; + + ck_assert(libinput_device_config_accel_is_available(device)); + + profile = libinput_device_config_accel_get_default_profile(device); + ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); + + profile = libinput_device_config_accel_get_profile(device); + ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); + + profiles = libinput_device_config_accel_get_profiles(device); + ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); + ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); + ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_DEVICE_SPEED_CURVE); + + verify_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); + + profile = libinput_device_config_accel_get_default_profile(device); + ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); + + verify_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); +} +END_TEST + +START_TEST(pointer_accel_profile_defaults_touchpad) { struct litest_device *dev = litest_current_device(); struct libinput_device *device = dev->libinput_device; @@ -1383,55 +1425,19 @@ START_TEST(pointer_accel_profile_defaults) profiles = libinput_device_config_accel_get_profiles(device); ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); - ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); - - status = libinput_device_config_accel_set_profile(device, - LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); - ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); - profile = libinput_device_config_accel_get_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); + ck_assert(profiles & LIBINPUT_CONFIG_ACCEL_PROFILE_DEVICE_SPEED_CURVE); + verify_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); + verify_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_DEVICE_SPEED_CURVE); profile = libinput_device_config_accel_get_default_profile(device); ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); - status = libinput_device_config_accel_set_profile(device, - LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); - ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); - profile = libinput_device_config_accel_get_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); -} -END_TEST - -START_TEST(pointer_accel_profile_defaults_noprofile) -{ - struct litest_device *dev = litest_current_device(); - struct libinput_device *device = dev->libinput_device; - enum libinput_config_status status; - enum libinput_config_accel_profile profile; - uint32_t profiles; - - ck_assert(libinput_device_config_accel_is_available(device)); - - profile = libinput_device_config_accel_get_default_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE); - - profile = libinput_device_config_accel_get_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE); - - profiles = libinput_device_config_accel_get_profiles(device); - ck_assert_int_eq(profiles, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE); - + verify_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); status = libinput_device_config_accel_set_profile(device, LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT); ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED); profile = libinput_device_config_accel_get_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE); - - status = libinput_device_config_accel_set_profile(device, - LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); - ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED); - profile = libinput_device_config_accel_get_profile(device); - ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_NONE); + ck_assert_int_eq(profile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE); } END_TEST @@ -2577,7 +2583,7 @@ TEST_COLLECTION(pointer) litest_add("pointer:accel", pointer_accel_defaults_absolute_relative, LITEST_ABSOLUTE|LITEST_RELATIVE, LITEST_ANY); litest_add("pointer:accel", pointer_accel_direction_change, LITEST_RELATIVE, LITEST_POINTINGSTICK); litest_add("pointer:accel", pointer_accel_profile_defaults, LITEST_RELATIVE, LITEST_TOUCHPAD); - litest_add("pointer:accel", pointer_accel_profile_defaults_noprofile, LITEST_TOUCHPAD, LITEST_ANY); + litest_add("pointer:accel", pointer_accel_profile_defaults_touchpad, LITEST_TOUCHPAD, LITEST_ANY); litest_add("pointer:accel", pointer_accel_profile_invalid, LITEST_RELATIVE, LITEST_ANY); litest_add("pointer:accel", pointer_accel_profile_noaccel, LITEST_ANY, LITEST_TOUCHPAD|LITEST_RELATIVE|LITEST_TABLET); litest_add("pointer:accel", pointer_accel_profile_flat_motion_relative, LITEST_RELATIVE, LITEST_TOUCHPAD);