diff options
author | Dominique Martinet <asmadeus@codewreck.org> | 2017-08-16 08:48:03 +0200 |
---|---|---|
committer | Dominique Martinet <asmadeus@codewreck.org> | 2017-08-16 09:18:12 +0200 |
commit | 880c239657bc81d244ae8fd3371b7b8a21bc8f07 (patch) | |
tree | 9506d3cea6374f2d8b193babf5507328957afe1b /backend/libinput | |
parent | 19d6442f52743d50d10c796d7146f58c251f67fe (diff) |
libinput: fail if no input found on init
This runs through events pending at init on initialization so we can
tell if some devices are available.
Note that with the way wlr_device_lists is managed, this checks that
there is at least one device we handle - it doesn't have to be a
keyboard, but there is at least a mouse or tablet_pad or something
that we care about.
Instead of failing inconditionally it might be better to leave the
decision to the user, e.g. add a "backend_has_devices" function to
call later.
(Tested by moving /dev/input off)
Fixes #24.
Diffstat (limited to 'backend/libinput')
-rw-r--r-- | backend/libinput/backend.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/backend/libinput/backend.c b/backend/libinput/backend.c index a8f43fbc..7dc1cc01 100644 --- a/backend/libinput/backend.c +++ b/backend/libinput/backend.c @@ -63,14 +63,22 @@ static bool wlr_libinput_backend_start(struct wlr_backend *_backend) { libinput_log_set_handler(backend->libinput_context, wlr_libinput_log); libinput_log_set_priority(backend->libinput_context, LIBINPUT_LOG_PRIORITY_ERROR); + int libinput_fd = libinput_get_fd(backend->libinput_context); + if (backend->wlr_device_lists->length == 0) { + wlr_libinput_readable(libinput_fd, WL_EVENT_READABLE, backend); + if (backend->wlr_device_lists->length == 0) { + wlr_log(L_ERROR, "No input device found, failing initialization"); + return false; + } + } + struct wl_event_loop *event_loop = wl_display_get_event_loop(backend->display); if (backend->input_event) { wl_event_source_remove(backend->input_event); } - backend->input_event = wl_event_loop_add_fd(event_loop, - libinput_get_fd(backend->libinput_context), WL_EVENT_READABLE, - wlr_libinput_readable, backend); + backend->input_event = wl_event_loop_add_fd(event_loop, libinput_fd, + WL_EVENT_READABLE, wlr_libinput_readable, backend); if (!backend->input_event) { wlr_log(L_ERROR, "Failed to create input event on event loop"); return false; |