aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/ipc-json.c21
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);
}
}
}