From: Peter Hutterer Date: Thu, 28 May 2020 06:41:09 +0000 (+1000) Subject: evdev: a device without any seat caps is an unhandled device X-Git-Tag: 1.15.901~28 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4058c43579f23b3abe288b7480fe2a4e70aaea20;p=platform%2Fupstream%2Flibinput.git evdev: a device without any seat caps is an unhandled device If we don't have any caps, assume the device is unhandled and ignore it. Signed-off-by: Peter Hutterer --- diff --git a/src/evdev.c b/src/evdev.c index 6afc8623..dae1284d 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2234,11 +2234,8 @@ evdev_device_create(struct libinput_seat *seat, evdev_pre_configure_model_quirks(device); device->dispatch = evdev_configure_device(device); - if (device->dispatch == NULL) { - if (device->seat_caps == 0) - unhandled_device = 1; + if (device->dispatch == NULL || device->seat_caps == 0) goto err; - } device->source = libinput_add_fd(libinput, fd, evdev_device_dispatch, device); @@ -2256,8 +2253,10 @@ evdev_device_create(struct libinput_seat *seat, err: close_restricted(libinput, fd); - if (device) + if (device) { + unhandled_device = device->seat_caps == 0; evdev_device_destroy(device); + } return unhandled_device ? EVDEV_UNHANDLED_DEVICE : NULL; } diff --git a/test/test-device.c b/test/test-device.c index df6bb22d..5fc79cdc 100644 --- a/test/test-device.c +++ b/test/test-device.c @@ -1472,6 +1472,27 @@ START_TEST(device_capability_check_invalid) } END_TEST +START_TEST(device_capability_nocaps_ignored) +{ + struct libevdev_uinput *uinput; + struct libinput *li; + struct libinput_device *device; + + /* SW_MAX isn't handled in libinput so the device is processed but + * ends up without seat capabilities and is ignored. */ + uinput = litest_create_uinput_device("test device", NULL, + EV_SW, SW_MAX, + -1); + li = litest_create_context(); + device = libinput_path_add_device(li, + libevdev_uinput_get_devnode(uinput)); + litest_assert_ptr_null(device); + + libinput_unref(li); + libevdev_uinput_destroy(uinput); +} +END_TEST + START_TEST(device_has_size) { struct litest_device *dev = litest_current_device(); @@ -1667,6 +1688,7 @@ TEST_COLLECTION(device) litest_add("device:capability", device_capability_at_least_one, LITEST_ANY, LITEST_ANY); litest_add("device:capability", device_capability_check_invalid, LITEST_ANY, LITEST_ANY); + litest_add_no_device("device:capability", device_capability_nocaps_ignored); litest_add("device:size", device_has_size, LITEST_TOUCHPAD, LITEST_ANY); litest_add("device:size", device_has_size, LITEST_TABLET, LITEST_ANY);