From f6f63f60d6c7f9602dd1c07b45eb45a97e5b6f5a Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Thu, 7 Dec 2017 09:58:32 -0500 Subject: basic input manager and seat --- sway/input/input-manager.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ sway/input/seat.c | 24 +++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 sway/input/seat.c (limited to 'sway/input') diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index 285a68b8..b5ab8cc1 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c @@ -7,12 +7,52 @@ #include #include "sway/config.h" #include "sway/input-manager.h" +#include "sway/seat.h" #include "sway/server.h" #include "list.h" #include "log.h" +static const char *default_seat = "seat0"; + struct input_config *current_input_config = NULL; +static struct sway_seat *input_manager_get_seat( + struct sway_input_manager *input, const char *seat_name) { + struct sway_seat *seat = NULL; + + for (int i = 0; i < input->seats->length; ++i) { + seat = input->seats->items[i]; + if (strcmp(seat->seat->name, seat_name) == 0) { + return seat; + } + } + + seat = sway_seat_create(input->server->wl_display, seat_name); + list_add(input->seats, seat); + + return seat; +} + +static void input_add_notify(struct wl_listener *listener, void *data) { + struct sway_input_manager *input = + wl_container_of(listener, input, input_add); + struct wlr_input_device *device = data; + + // TODO device configuration + struct sway_seat *seat = input_manager_get_seat(input, default_seat); + sway_seat_add_device(seat, device); +} + +static void input_remove_notify(struct wl_listener *listener, void *data) { + struct sway_input_manager *input = + wl_container_of(listener, input, input_remove); + struct wlr_input_device *device = data; + + // TODO device configuration + struct sway_seat *seat = input_manager_get_seat(input, default_seat); + sway_seat_remove_device(seat, device); +} + struct sway_input_manager *sway_input_manager_create( struct sway_server *server) { struct sway_input_manager *input = @@ -20,6 +60,20 @@ struct sway_input_manager *sway_input_manager_create( if (!input) { return NULL; } + // XXX probably don't need the full server + input->server = server; + + input->seats = create_list(); + + // create the default seat + input_manager_get_seat(input, default_seat); + + input->input_add.notify = input_add_notify; + wl_signal_add(&server->backend->events.input_add, &input->input_add); + + input->input_remove.notify = input_remove_notify; + wl_signal_add(&server->backend->events.input_remove, &input->input_remove); + return input; } diff --git a/sway/input/seat.c b/sway/input/seat.c new file mode 100644 index 00000000..f41b6dba --- /dev/null +++ b/sway/input/seat.c @@ -0,0 +1,24 @@ +#define _XOPEN_SOURCE 700 +#include "sway/seat.h" +#include "sway/input-manager.h" +#include "log.h" + +struct sway_seat *sway_seat_create(struct wl_display *display, + const char *seat_name) { + struct sway_seat *seat = calloc(1, sizeof(struct sway_seat)); + if (!seat) { + return NULL; + } + seat->seat = wlr_seat_create(display, seat_name); + return seat; +} + +void sway_seat_add_device(struct sway_seat *seat, + struct wlr_input_device *device) { + sway_log(L_DEBUG, "input add: %s", device->name); +} + +void sway_seat_remove_device(struct sway_seat *seat, + struct wlr_input_device *device) { + sway_log(L_DEBUG, "input remove: %s", device->name); +} -- cgit v1.2.3-54-g00ecf