diff options
Diffstat (limited to 'sway/ipc-json.c')
-rw-r--r-- | sway/ipc-json.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index b9abc47f..7a65be07 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c @@ -824,19 +824,24 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) { struct wlr_keyboard *keyboard = device->wlr_device->keyboard; struct xkb_keymap *keymap = keyboard->keymap; struct xkb_state *state = keyboard->xkb_state; + + json_object *layouts_arr = json_object_new_array(); + json_object_object_add(object, "xkb_layout_names", layouts_arr); + xkb_layout_index_t num_layouts = xkb_keymap_num_layouts(keymap); xkb_layout_index_t layout_idx; for (layout_idx = 0; layout_idx < num_layouts; layout_idx++) { - bool is_active = - xkb_state_layout_index_is_active(state, - layout_idx, - XKB_STATE_LAYOUT_EFFECTIVE); + const char *layout = xkb_keymap_layout_get_name(keymap, layout_idx); + json_object_array_add(layouts_arr, + layout ? json_object_new_string(layout) : NULL); + + bool is_active = xkb_state_layout_index_is_active(state, + layout_idx, XKB_STATE_LAYOUT_EFFECTIVE); if (is_active) { - const char *layout = - xkb_keymap_layout_get_name(keymap, layout_idx); + json_object_object_add(object, "xkb_active_layout_index", + json_object_new_int(layout_idx)); json_object_object_add(object, "xkb_active_layout_name", - layout ? json_object_new_string(layout) : NULL); - break; + layout ? json_object_new_string(layout) : NULL); } } } |