diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-08-12 13:51:47 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2017-08-12 13:51:47 -0400 |
commit | c95a108d2f68ec7a3325db418f9c2f32f6677f0b (patch) | |
tree | 0479fa458c87cb2ae8d310d9cfe83a9f06a1fa5e /backend/libinput/backend.c | |
parent | 81cd90297d96c68ac7794b1bb877f3b77b04188e (diff) |
Update libinput backend with new state design
Diffstat (limited to 'backend/libinput/backend.c')
-rw-r--r-- | backend/libinput/backend.c | 100 |
1 files changed, 47 insertions, 53 deletions
diff --git a/backend/libinput/backend.c b/backend/libinput/backend.c index 42c1eac9..0fa3aca7 100644 --- a/backend/libinput/backend.c +++ b/backend/libinput/backend.c @@ -8,14 +8,14 @@ #include "backend/libinput.h" static int wlr_libinput_open_restricted(const char *path, - int flags, void *_state) { - struct wlr_backend_state *state = _state; - return wlr_session_open_file(state->session, path); + int flags, void *_backend) { + struct wlr_libinput_backend *backend = _backend; + return wlr_session_open_file(backend->session, path); } -static void wlr_libinput_close_restricted(int fd, void *_state) { - struct wlr_backend_state *state = _state; - wlr_session_close_file(state->session, fd); +static void wlr_libinput_close_restricted(int fd, void *_backend) { + struct wlr_libinput_backend *backend = _backend; + wlr_session_close_file(backend->session, fd); } static const struct libinput_interface libinput_impl = { @@ -23,16 +23,16 @@ static const struct libinput_interface libinput_impl = { .close_restricted = wlr_libinput_close_restricted }; -static int wlr_libinput_readable(int fd, uint32_t mask, void *_state) { - struct wlr_backend_state *state = _state; - if (libinput_dispatch(state->libinput) != 0) { +static int wlr_libinput_readable(int fd, uint32_t mask, void *_backend) { + struct wlr_libinput_backend *backend = _backend; + if (libinput_dispatch(backend->libinput) != 0) { wlr_log(L_ERROR, "Failed to dispatch libinput"); // TODO: some kind of abort? return 0; } struct libinput_event *event; - while ((event = libinput_get_event(state->libinput))) { - wlr_libinput_event(state, event); + while ((event = libinput_get_event(backend->libinput))) { + wlr_libinput_event(backend, event); libinput_event_destroy(event); } return 0; @@ -43,34 +43,35 @@ static void wlr_libinput_log(struct libinput *libinput, _wlr_vlog(L_ERROR, fmt, args); } -static bool wlr_libinput_backend_init(struct wlr_backend_state *state) { +static bool wlr_libinput_backend_init(struct wlr_backend *_backend) { + struct wlr_libinput_backend *backend = (struct wlr_libinput_backend *)_backend; wlr_log(L_DEBUG, "Initializing libinput"); - state->libinput = libinput_udev_create_context(&libinput_impl, state, - state->udev->udev); - if (!state->libinput) { + backend->libinput = libinput_udev_create_context(&libinput_impl, backend, + backend->udev->udev); + if (!backend->libinput) { wlr_log(L_ERROR, "Failed to create libinput context"); return false; } // TODO: Let user customize seat used - if (libinput_udev_assign_seat(state->libinput, "seat0") != 0) { + if (libinput_udev_assign_seat(backend->libinput, "seat0") != 0) { wlr_log(L_ERROR, "Failed to assign libinput seat"); return false; } // TODO: More sophisticated logging - libinput_log_set_handler(state->libinput, wlr_libinput_log); - libinput_log_set_priority(state->libinput, LIBINPUT_LOG_PRIORITY_ERROR); + libinput_log_set_handler(backend->libinput, wlr_libinput_log); + libinput_log_set_priority(backend->libinput, LIBINPUT_LOG_PRIORITY_ERROR); struct wl_event_loop *event_loop = - wl_display_get_event_loop(state->display); - if (state->input_event) { - wl_event_source_remove(state->input_event); + wl_display_get_event_loop(backend->display); + if (backend->input_event) { + wl_event_source_remove(backend->input_event); } - state->input_event = wl_event_loop_add_fd(event_loop, - libinput_get_fd(state->libinput), WL_EVENT_READABLE, - wlr_libinput_readable, state); - if (!state->input_event) { + backend->input_event = wl_event_loop_add_fd(event_loop, + libinput_get_fd(backend->libinput), 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; } @@ -78,22 +79,23 @@ static bool wlr_libinput_backend_init(struct wlr_backend_state *state) { return true; } -static void wlr_libinput_backend_destroy(struct wlr_backend_state *state) { - if (!state) { +static void wlr_libinput_backend_destroy(struct wlr_backend *_backend) { + if (!_backend) { return; } - for (size_t i = 0; i < state->devices->length; i++) { - list_t *wlr_devices = state->devices->items[i]; + struct wlr_libinput_backend *backend = (struct wlr_libinput_backend *)_backend; + for (size_t i = 0; i < backend->devices->length; i++) { + list_t *wlr_devices = backend->devices->items[i]; for (size_t j = 0; j < wlr_devices->length; j++) { struct wlr_input_device *wlr_device = wlr_devices->items[j]; - wl_signal_emit(&state->backend->events.input_remove, wlr_device); + wl_signal_emit(&backend->backend.events.input_remove, wlr_device); wlr_input_device_destroy(wlr_device); } list_free(wlr_devices); } - list_free(state->devices); - libinput_unref(state->libinput); - free(state); + list_free(backend->devices); + libinput_unref(backend->libinput); + free(backend); } static struct wlr_backend_impl backend_impl = { @@ -102,7 +104,7 @@ static struct wlr_backend_impl backend_impl = { }; static void session_signal(struct wl_listener *listener, void *data) { - struct wlr_backend_state *backend = wl_container_of(listener, backend, session_signal); + struct wlr_libinput_backend *backend = wl_container_of(listener, backend, session_signal); struct wlr_session *session = data; if (!backend->libinput) { @@ -120,35 +122,27 @@ struct wlr_backend *wlr_libinput_backend_create(struct wl_display *display, struct wlr_session *session, struct wlr_udev *udev) { assert(display && session && udev); - struct wlr_backend_state *state = calloc(1, sizeof(struct wlr_backend_state)); - if (!state) { - wlr_log(L_ERROR, "Allocation failed: %s", strerror(errno)); - return NULL; - } - - struct wlr_backend *backend = wlr_backend_create(&backend_impl, state); + struct wlr_libinput_backend *backend = calloc(1, sizeof(struct wlr_libinput_backend)); if (!backend) { wlr_log(L_ERROR, "Allocation failed: %s", strerror(errno)); - goto error_state; + return NULL; } + wlr_backend_create(&backend->backend, &backend_impl); - if (!(state->devices = list_create())) { + if (!(backend->devices = list_create())) { wlr_log(L_ERROR, "Allocation failed: %s", strerror(errno)); goto error_backend; } - state->backend = backend; - state->session = session; - state->udev = udev; - state->display = display; + backend->session = session; + backend->udev = udev; + backend->display = display; - state->session_signal.notify = session_signal; - wl_signal_add(&session->session_signal, &state->session_signal); + backend->session_signal.notify = session_signal; + wl_signal_add(&session->session_signal, &backend->session_signal); - return backend; -error_state: - free(state); + return &backend->backend; error_backend: - wlr_backend_destroy(backend); + free(backend); return NULL; } |