[PATCH libinput 7/8] evdev: init pointer accel filters when we have rel x/y axes
Derek Foreman
derekf at osg.samsung.com
Mon Apr 27 08:01:18 PDT 2015
On 27/04/15 12:52 AM, Peter Hutterer wrote:
> Some devices provide abs x/y and rel x/y. We can't know which event the device
> will send. The Microsoft Surface Type Cover sends relative devices, which
It probably sends events, not devices. :)
This whole series looks correct to me (though the use of "either" to
mean exclusive or in 6/8 caught me out momentarily)
Reviewed-By: Derek Foreman <derekf at osg.samsung.com>
> then crashes libinput when we don't have an accel filter set up.
>
> So instead of checking that the device doesn't have ABS_X/Y, check for the
> device to have REL_X/Y instead.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1206869
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> src/evdev.c | 4 ++--
> test/pointer.c | 14 +++++++++++++-
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index db19ac8..d65b113 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1792,8 +1792,8 @@ evdev_configure_device(struct evdev_device *device)
> }
>
> if (udev_tags & EVDEV_UDEV_TAG_MOUSE) {
> - if (!libevdev_has_event_code(evdev, EV_ABS, ABS_X) &&
> - !libevdev_has_event_code(evdev, EV_ABS, ABS_Y) &&
> + if (libevdev_has_event_code(evdev, EV_REL, REL_X) &&
> + libevdev_has_event_code(evdev, EV_REL, REL_Y) &&
>
> evdev_device_init_pointer_acceleration(
> device,
> pointer_accel_profile_linear) == -1)
> diff --git a/test/pointer.c b/test/pointer.c
> index 01ea2fd..9d3dda6 100644
> --- a/test/pointer.c
> +++ b/test/pointer.c
> @@ -825,6 +825,17 @@ START_TEST(pointer_accel_defaults_absolute)
> }
> END_TEST
>
> +START_TEST(pointer_accel_defaults_absolute_relative)
> +{
> + struct litest_device *dev = litest_current_device();
> + struct libinput_device *device = dev->libinput_device;
> +
> + ck_assert(libinput_device_config_accel_is_available(device));
> + ck_assert(libinput_device_config_accel_get_default_speed(device) == 0.0);
> + ck_assert(libinput_device_config_accel_get_speed(device) == 0.0);
> +}
> +END_TEST
> +
> START_TEST(pointer_accel_direction_change)
> {
> struct litest_device *dev = litest_current_device();
> @@ -1223,7 +1234,8 @@ int main (int argc, char **argv) {
>
> litest_add("pointer:accel", pointer_accel_defaults, LITEST_RELATIVE, LITEST_ANY);
> litest_add("pointer:accel", pointer_accel_invalid, LITEST_RELATIVE, LITEST_ANY);
> - litest_add("pointer:accel", pointer_accel_defaults_absolute, LITEST_ABSOLUTE, LITEST_ANY);
> + litest_add("pointer:accel", pointer_accel_defaults_absolute, LITEST_ABSOLUTE, LITEST_RELATIVE);
> + 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_ANY);
>
> litest_add("pointer:middlebutton", middlebutton, LITEST_BUTTON, LITEST_POINTINGSTICK);
>
More information about the wayland-devel
mailing list