diff options
author | emersion <contact@emersion.fr> | 2018-11-12 21:26:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-12 21:26:00 +0100 |
commit | 3b8d4a9212c335211001e96a0b0fbcb8049d0557 (patch) | |
tree | c4ba1704c7d1bfe6f1006eda6b788dee14e071d9 /sway | |
parent | Merge pull request #2979 from RedSoxFan/config-var-repl (diff) | |
parent | IPC: Send keyboard layout info in IPC_GET_INPUTS (diff) | |
download | sway-3b8d4a9212c335211001e96a0b0fbcb8049d0557.tar.gz sway-3b8d4a9212c335211001e96a0b0fbcb8049d0557.tar.zst sway-3b8d4a9212c335211001e96a0b0fbcb8049d0557.zip |
Merge pull request #3116 from harishkrupo/master
IPC: Send keyboard layout info in IPC_GET_INPUTS
Diffstat (limited to 'sway')
-rw-r--r-- | sway/ipc-json.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 4583558c..4d9a87d8 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "sway/input/seat.h" | 12 | #include "sway/input/seat.h" |
13 | #include <wlr/types/wlr_box.h> | 13 | #include <wlr/types/wlr_box.h> |
14 | #include <wlr/types/wlr_output.h> | 14 | #include <wlr/types/wlr_output.h> |
15 | #include <xkbcommon/xkbcommon.h> | ||
15 | #include "wlr-layer-shell-unstable-v1-protocol.h" | 16 | #include "wlr-layer-shell-unstable-v1-protocol.h" |
16 | 17 | ||
17 | static const char *ipc_json_layout_description(enum sway_container_layout l) { | 18 | static const char *ipc_json_layout_description(enum sway_container_layout l) { |
@@ -503,6 +504,27 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) { | |||
503 | json_object_object_add(object, "type", | 504 | json_object_object_add(object, "type", |
504 | json_object_new_string(describe_device_type(device))); | 505 | json_object_new_string(describe_device_type(device))); |
505 | 506 | ||
507 | if (device->wlr_device->type == WLR_INPUT_DEVICE_KEYBOARD) { | ||
508 | struct wlr_keyboard *keyboard = device->wlr_device->keyboard; | ||
509 | struct xkb_keymap *keymap = keyboard->keymap; | ||
510 | struct xkb_state *state = keyboard->xkb_state; | ||
511 | xkb_layout_index_t num_layouts = xkb_keymap_num_layouts(keymap); | ||
512 | xkb_layout_index_t layout_idx; | ||
513 | for (layout_idx = 0; layout_idx < num_layouts; layout_idx++) { | ||
514 | bool is_active = | ||
515 | xkb_state_layout_index_is_active(state, | ||
516 | layout_idx, | ||
517 | XKB_STATE_LAYOUT_EFFECTIVE); | ||
518 | if (is_active) { | ||
519 | const char *layout = | ||
520 | xkb_keymap_layout_get_name(keymap, layout_idx); | ||
521 | json_object_object_add(object, "xkb_active_layout_name", | ||
522 | json_object_new_string(layout)); | ||
523 | break; | ||
524 | } | ||
525 | } | ||
526 | } | ||
527 | |||
506 | return object; | 528 | return object; |
507 | } | 529 | } |
508 | 530 | ||