mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-06 03:20:29 +01:00
evdev: only use mtdev for Protocol A devices
For Protocol B devices, mtdev merely routes the events and is not needed. For Protocol A devices, mtdev is needed, so fail for those devices now if we mtdev fails.
This commit is contained in:
parent
3f0ee131e1
commit
fe57a4e5fa
1 changed files with 13 additions and 7 deletions
20
src/evdev.c
20
src/evdev.c
|
|
@ -471,6 +471,15 @@ evdev_handle_device(struct evdev_device *device)
|
|||
device->is_mt = 1;
|
||||
device->mt.slot = 0;
|
||||
device->caps |= EVDEV_TOUCH;
|
||||
|
||||
if (!TEST_BIT(abs_bits, ABS_MT_SLOT)) {
|
||||
device->mtdev = mtdev_new_open(device->fd);
|
||||
if (!device->mtdev) {
|
||||
weston_log("mtdev required but failed to open for %s\n",
|
||||
device->devnode);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (TEST_BIT(ev_bits, EV_REL)) {
|
||||
|
|
@ -580,6 +589,8 @@ evdev_device_create(struct weston_seat *seat, const char *path, int device_fd)
|
|||
device->devname = strdup(devname);
|
||||
|
||||
if (!evdev_handle_device(device)) {
|
||||
if (device->mtdev)
|
||||
mtdev_close_delete(device->mtdev);
|
||||
free(device->devnode);
|
||||
free(device->devname);
|
||||
free(device);
|
||||
|
|
@ -595,13 +606,6 @@ evdev_device_create(struct weston_seat *seat, const char *path, int device_fd)
|
|||
if (device->dispatch == NULL)
|
||||
goto err1;
|
||||
|
||||
|
||||
if (device->is_mt) {
|
||||
device->mtdev = mtdev_new_open(device->fd);
|
||||
if (!device->mtdev)
|
||||
weston_log("mtdev failed to open for %s\n", path);
|
||||
}
|
||||
|
||||
device->source = wl_event_loop_add_fd(ec->input_loop, device->fd,
|
||||
WL_EVENT_READABLE,
|
||||
evdev_device_data, device);
|
||||
|
|
@ -613,6 +617,8 @@ evdev_device_create(struct weston_seat *seat, const char *path, int device_fd)
|
|||
err2:
|
||||
device->dispatch->interface->destroy(device->dispatch);
|
||||
err1:
|
||||
if (device->mtdev)
|
||||
mtdev_close_delete(device->mtdev);
|
||||
free(device->devname);
|
||||
free(device->devnode);
|
||||
free(device);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue