aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/input-manager.c
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-07-28 20:47:56 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2018-07-28 20:47:56 -0400
commit1e65439a5448ac203fa0476d410ad303e0766552 (patch)
tree656214112817dbdcd12ce78ea5ddf0c2dff2d88f /sway/input/input-manager.c
parentMerge pull request #2360 from RyanDwyer/floating-containers (diff)
downloadsway-1e65439a5448ac203fa0476d410ad303e0766552.tar.gz
sway-1e65439a5448ac203fa0476d410ad303e0766552.tar.zst
sway-1e65439a5448ac203fa0476d410ad303e0766552.zip
Add virtual keyboard protocol
Ref #2373
Diffstat (limited to 'sway/input/input-manager.c')
-rw-r--r--sway/input/input-manager.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c
index 0b7cb766..c820e032 100644
--- a/sway/input/input-manager.c
+++ b/sway/input/input-manager.c
@@ -8,6 +8,7 @@
8#include <math.h> 8#include <math.h>
9#include <wlr/backend/libinput.h> 9#include <wlr/backend/libinput.h>
10#include <wlr/types/wlr_input_inhibitor.h> 10#include <wlr/types/wlr_input_inhibitor.h>
11#include <wlr/types/wlr_virtual_keyboard_v1.h>
11#include "sway/config.h" 12#include "sway/config.h"
12#include "sway/input/input-manager.h" 13#include "sway/input/input-manager.h"
13#include "sway/input/seat.h" 14#include "sway/input/seat.h"
@@ -303,6 +304,35 @@ static void handle_inhibit_deactivate(struct wl_listener *listener, void *data)
303 } 304 }
304} 305}
305 306
307void handle_virtual_keyboard(struct wl_listener *listener, void *data) {
308 struct sway_input_manager *input_manager =
309 wl_container_of(listener, input_manager, virtual_keyboard_new);
310 struct wlr_virtual_keyboard_v1 *keyboard = data;
311 struct wlr_input_device *device = &keyboard->input_device;
312
313 struct sway_seat *seat = input_manager_get_default_seat(input_manager);
314
315 // TODO: The user might want this on a different seat
316 struct sway_input_device *input_device =
317 calloc(1, sizeof(struct sway_input_device));
318 if (!sway_assert(input_device, "could not allocate input device")) {
319 return;
320 }
321 device->data = input_device;
322
323 input_device->wlr_device = device;
324 input_device->identifier = get_device_identifier(device);
325 wl_list_insert(&input_manager->devices, &input_device->link);
326
327 wlr_log(WLR_DEBUG, "adding virtual keyboard: '%s'",
328 input_device->identifier);
329
330 wl_signal_add(&device->events.destroy, &input_device->device_destroy);
331 input_device->device_destroy.notify = handle_device_destroy;
332
333 seat_add_device(seat, input_device);
334}
335
306struct sway_input_manager *input_manager_create( 336struct sway_input_manager *input_manager_create(
307 struct sway_server *server) { 337 struct sway_server *server) {
308 struct sway_input_manager *input = 338 struct sway_input_manager *input =
@@ -321,6 +351,12 @@ struct sway_input_manager *input_manager_create(
321 input->new_input.notify = handle_new_input; 351 input->new_input.notify = handle_new_input;
322 wl_signal_add(&server->backend->events.new_input, &input->new_input); 352 wl_signal_add(&server->backend->events.new_input, &input->new_input);
323 353
354 input->virtual_keyboard = wlr_virtual_keyboard_manager_v1_create(
355 server->wl_display);
356 wl_signal_add(&input->virtual_keyboard->events.new_virtual_keyboard,
357 &input->virtual_keyboard_new);
358 input->virtual_keyboard_new.notify = handle_virtual_keyboard;
359
324 input->inhibit = wlr_input_inhibit_manager_create(server->wl_display); 360 input->inhibit = wlr_input_inhibit_manager_create(server->wl_display);
325 input->inhibit_activate.notify = handle_inhibit_activate; 361 input->inhibit_activate.notify = handle_inhibit_activate;
326 wl_signal_add(&input->inhibit->events.activate, 362 wl_signal_add(&input->inhibit->events.activate,