diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/libinput/keyboard.c | 25 | ||||
-rw-r--r-- | backend/wayland/wl_seat.c | 8 |
2 files changed, 23 insertions, 10 deletions
diff --git a/backend/libinput/keyboard.c b/backend/libinput/keyboard.c index b231828d..db4ac0ed 100644 --- a/backend/libinput/keyboard.c +++ b/backend/libinput/keyboard.c @@ -7,17 +7,21 @@ #include <wlr/util/log.h> #include "backend/libinput.h" -struct wlr_keyboard_state { +struct wlr_libinput_keyboard { + struct wlr_keyboard wlr_keyboard; struct libinput_device *libinput_dev; }; -static void wlr_libinput_keyboard_set_leds(struct wlr_keyboard_state *kbstate, uint32_t leds) { - libinput_device_led_update(kbstate->libinput_dev, leds); +static void wlr_libinput_keyboard_set_leds(struct wlr_keyboard *wlr_kb, uint32_t leds) { + struct wlr_libinput_keyboard *wlr_libinput_kb = (struct wlr_libinput_keyboard *)wlr_kb; + libinput_device_led_update(wlr_libinput_kb->libinput_dev, leds); } -static void wlr_libinput_keyboard_destroy(struct wlr_keyboard_state *kbstate) { - libinput_device_unref(kbstate->libinput_dev); - free(kbstate); +static void wlr_libinput_keyboard_destroy(struct wlr_keyboard *wlr_kb) { + struct wlr_libinput_keyboard *wlr_libinput_kb = + (struct wlr_libinput_keyboard *)wlr_kb; + libinput_device_unref(wlr_libinput_kb->libinput_dev); + free(wlr_libinput_kb); } struct wlr_keyboard_impl impl = { @@ -28,11 +32,14 @@ struct wlr_keyboard_impl impl = { struct wlr_keyboard *wlr_libinput_keyboard_create( struct libinput_device *libinput_dev) { assert(libinput_dev); - struct wlr_keyboard_state *kbstate = calloc(1, sizeof(struct wlr_keyboard_state)); - kbstate->libinput_dev = libinput_dev; + struct wlr_libinput_keyboard *wlr_libinput_kb = + calloc(1, sizeof(struct wlr_libinput_keyboard)); + wlr_libinput_kb->libinput_dev = libinput_dev; libinput_device_ref(libinput_dev); libinput_device_led_update(libinput_dev, 0); - return wlr_keyboard_create(&impl, kbstate); + struct wlr_keyboard *wlr_kb = &wlr_libinput_kb->wlr_keyboard; + wlr_keyboard_init(wlr_kb, &impl); + return wlr_kb; } void handle_keyboard_key(struct libinput_event *event, diff --git a/backend/wayland/wl_seat.c b/backend/wayland/wl_seat.c index 9b54a328..7afe8775 100644 --- a/backend/wayland/wl_seat.c +++ b/backend/wayland/wl_seat.c @@ -237,12 +237,18 @@ static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, wlr_log(L_ERROR, "Unable to allocate wl_pointer device"); return; } + wlr_device->keyboard = calloc(1, sizeof(struct wlr_keyboard)); + if (!wlr_device->keyboard) { + free(wlr_device); + wlr_log(L_ERROR, "Unable to allocate wlr keyboard"); + return; + } + wlr_keyboard_init(wlr_device->keyboard, NULL); struct wlr_wl_input_device *wlr_wl_device = (struct wlr_wl_input_device *)wlr_device; struct wl_keyboard *wl_keyboard = wl_seat_get_keyboard(wl_seat); wl_keyboard_add_listener(wl_keyboard, &keyboard_listener, wlr_device); - wlr_device->keyboard = wlr_keyboard_create(NULL, NULL); wlr_wl_device->resource = wl_keyboard; wl_signal_emit(&backend->backend.events.input_add, wlr_device); } |