diff --git a/include/sway/input/input-manager.h b/include/sway/input/input-manager.h index c9bd08f0d..a69b06f40 100644 --- a/include/sway/input/input-manager.h +++ b/include/sway/input/input-manager.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "sway/server.h" #include "sway/config.h" #include "list.h" @@ -25,6 +26,7 @@ struct sway_input_manager { struct wlr_keyboard_shortcuts_inhibit_manager_v1 *keyboard_shortcuts_inhibit; struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard; struct wlr_virtual_pointer_manager_v1 *virtual_pointer; + struct wlr_seat_manager_v1 *seat_manager; struct wl_listener new_input; struct wl_listener inhibit_activate; diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index f04a8ce09..7d30dae37 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -442,6 +443,19 @@ void handle_virtual_pointer(struct wl_listener *listener, void *data) { } } +struct wlr_seat *seat_manager_create_seat(const char *name) { + struct sway_seat *seat = seat_create(name); + return seat ? seat->wlr_seat : NULL; +} + +void seat_manager_destroy_seat(struct wlr_seat *wlr_seat) { + struct sway_seat *seat = + input_manager_sway_seat_from_wlr_seat(wlr_seat); + if (seat) { + seat_destroy(seat); + } +} + struct sway_input_manager *input_manager_create(struct sway_server *server) { struct sway_input_manager *input = calloc(1, sizeof(struct sway_input_manager)); @@ -483,6 +497,12 @@ struct sway_input_manager *input_manager_create(struct sway_server *server) { wl_signal_add(&input->keyboard_shortcuts_inhibit->events.new_inhibitor, &input->keyboard_shortcuts_inhibit_new_inhibitor); + input->seat_manager = wlr_seat_manager_v1_create(server->wl_display); + assert(input->seat_manager); + + input->seat_manager->create_seat = seat_manager_create_seat; + input->seat_manager->destroy_seat = seat_manager_destroy_seat; + return input; }