mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-05-14 17:38:08 +02:00
evdev: init pointer accel filters when we have rel x/y axes
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 events, which 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@who-t.net> Reviewed-By: Derek Foreman <derekf@osg.samsung.com>
This commit is contained in:
parent
6083fafe53
commit
5e85957ad2
2 changed files with 15 additions and 3 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue