diff options
author | Andri Yngvason <andri@yngvason.is> | 2020-02-08 18:17:42 +0000 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2024-03-18 09:07:21 +0100 |
commit | 5a7477cb8f568ce4aeb852215ad40899f18f3d91 (patch) | |
tree | b080fbb1902c8ebab17c29a6ea44be670cc8b2af /sway/input/input-manager.c | |
parent | man: document that the scale might be adjusted (diff) | |
download | sway-5a7477cb8f568ce4aeb852215ad40899f18f3d91.tar.gz sway-5a7477cb8f568ce4aeb852215ad40899f18f3d91.tar.zst sway-5a7477cb8f568ce4aeb852215ad40899f18f3d91.zip |
Implement transient seat management
Diffstat (limited to 'sway/input/input-manager.c')
-rw-r--r-- | sway/input/input-manager.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c index 089e1e71..248ca34e 100644 --- a/sway/input/input-manager.c +++ b/sway/input/input-manager.c | |||
@@ -2,7 +2,9 @@ | |||
2 | #include <stdio.h> | 2 | #include <stdio.h> |
3 | #include <string.h> | 3 | #include <string.h> |
4 | #include <math.h> | 4 | #include <math.h> |
5 | #include <assert.h> | ||
5 | #include <wlr/config.h> | 6 | #include <wlr/config.h> |
7 | #include <wlr/backend/libinput.h> | ||
6 | #include <wlr/types/wlr_cursor.h> | 8 | #include <wlr/types/wlr_cursor.h> |
7 | #include <wlr/types/wlr_keyboard_group.h> | 9 | #include <wlr/types/wlr_keyboard_group.h> |
8 | #include <wlr/types/wlr_virtual_keyboard_v1.h> | 10 | #include <wlr/types/wlr_virtual_keyboard_v1.h> |
@@ -431,6 +433,20 @@ void handle_virtual_pointer(struct wl_listener *listener, void *data) { | |||
431 | } | 433 | } |
432 | } | 434 | } |
433 | 435 | ||
436 | static void handle_transient_seat_manager_create_seat( | ||
437 | struct wl_listener *listener, void *data) { | ||
438 | struct wlr_transient_seat_v1 *transient_seat = data; | ||
439 | static uint64_t i; | ||
440 | char name[256]; | ||
441 | snprintf(name, sizeof(name), "transient-%"PRIx64, i++); | ||
442 | struct sway_seat *seat = seat_create(name); | ||
443 | if (seat && seat->wlr_seat) { | ||
444 | wlr_transient_seat_v1_ready(transient_seat, seat->wlr_seat); | ||
445 | } else { | ||
446 | wlr_transient_seat_v1_deny(transient_seat); | ||
447 | } | ||
448 | } | ||
449 | |||
434 | struct sway_input_manager *input_manager_create(struct sway_server *server) { | 450 | struct sway_input_manager *input_manager_create(struct sway_server *server) { |
435 | struct sway_input_manager *input = | 451 | struct sway_input_manager *input = |
436 | calloc(1, sizeof(struct sway_input_manager)); | 452 | calloc(1, sizeof(struct sway_input_manager)); |
@@ -466,6 +482,15 @@ struct sway_input_manager *input_manager_create(struct sway_server *server) { | |||
466 | 482 | ||
467 | input->pointer_gestures = wlr_pointer_gestures_v1_create(server->wl_display); | 483 | input->pointer_gestures = wlr_pointer_gestures_v1_create(server->wl_display); |
468 | 484 | ||
485 | input->transient_seat_manager = | ||
486 | wlr_transient_seat_manager_v1_create(server->wl_display); | ||
487 | assert(input->transient_seat_manager); | ||
488 | |||
489 | input->transient_seat_create.notify = | ||
490 | handle_transient_seat_manager_create_seat; | ||
491 | wl_signal_add(&input->transient_seat_manager->events.create_seat, | ||
492 | &input->transient_seat_create); | ||
493 | |||
469 | return input; | 494 | return input; |
470 | } | 495 | } |
471 | 496 | ||