From 76d5fb1dda68a5689a6e0e05ce74b19ca9df48a2 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 17 Aug 2022 18:23:06 +0000 Subject: [PATCH] seat: implement virtual keyboard protocol --- include/labwc.h | 4 ++++ src/seat.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/labwc.h b/include/labwc.h index 49e49011..62171809 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -41,6 +41,7 @@ #include #include #include +#include #include #if HAVE_XWAYLAND #include @@ -160,6 +161,9 @@ struct seat { struct wlr_virtual_pointer_manager_v1 *virtual_pointer; struct wl_listener virtual_pointer_new; + + struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard; + struct wl_listener virtual_keyboard_new; }; struct lab_data_buffer; diff --git a/src/seat.c b/src/seat.c index cdd548e0..ca026b35 100644 --- a/src/seat.c +++ b/src/seat.c @@ -307,6 +307,21 @@ new_virtual_pointer(struct wl_listener *listener, void *data) } } +static void +new_virtual_keyboard(struct wl_listener *listener, void *data) +{ + struct seat *seat = wl_container_of(listener, seat, virtual_keyboard_new); + struct wlr_virtual_keyboard_v1 *keyboard = data; + struct wlr_input_device *device = &keyboard->keyboard.base; + struct input *input = calloc(1, sizeof(struct input)); + + device->data = input; + input->wlr_input_device = device; + + seat_add_device(seat, input); + new_keyboard(seat, input); +} + void seat_init(struct server *server) { @@ -337,6 +352,12 @@ seat_init(struct server *server) &seat->virtual_pointer_new); seat->virtual_pointer_new.notify = new_virtual_pointer; + seat->virtual_keyboard = wlr_virtual_keyboard_manager_v1_create( + server->wl_display); + wl_signal_add(&seat->virtual_keyboard->events.new_virtual_keyboard, + &seat->virtual_keyboard_new); + seat->virtual_keyboard_new.notify = new_virtual_keyboard; + seat->cursor = wlr_cursor_create(); if (!seat->cursor) { wlr_log(WLR_ERROR, "unable to create cursor");