Merge pull request #3116 from harishkrupo/master

IPC: Send keyboard layout info in IPC_GET_INPUTS
This commit is contained in:
emersion 2018-11-12 21:26:00 +01:00 committed by GitHub
commit 3b8d4a9212
Failed to generate hash of commit
2 changed files with 31 additions and 2 deletions

View file

@ -12,6 +12,7 @@
#include "sway/input/seat.h" #include "sway/input/seat.h"
#include <wlr/types/wlr_box.h> #include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_output.h> #include <wlr/types/wlr_output.h>
#include <xkbcommon/xkbcommon.h>
#include "wlr-layer-shell-unstable-v1-protocol.h" #include "wlr-layer-shell-unstable-v1-protocol.h"
static const char *ipc_json_layout_description(enum sway_container_layout l) { 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) {
json_object_object_add(object, "type", json_object_object_add(object, "type",
json_object_new_string(describe_device_type(device))); json_object_new_string(describe_device_type(device)));
if (device->wlr_device->type == WLR_INPUT_DEVICE_KEYBOARD) {
struct wlr_keyboard *keyboard = device->wlr_device->keyboard;
struct xkb_keymap *keymap = keyboard->keymap;
struct xkb_state *state = keyboard->xkb_state;
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);
if (is_active) {
const char *layout =
xkb_keymap_layout_get_name(keymap, layout_idx);
json_object_object_add(object, "xkb_active_layout_name",
json_object_new_string(layout));
break;
}
}
}
return object; return object;
} }

View file

@ -111,7 +111,7 @@ static const char *pretty_type_name(const char *name) {
} }
static void pretty_print_input(json_object *i) { static void pretty_print_input(json_object *i) {
json_object *id, *name, *type, *product, *vendor; json_object *id, *name, *type, *product, *vendor, *kbdlayout;
json_object_object_get_ex(i, "identifier", &id); json_object_object_get_ex(i, "identifier", &id);
json_object_object_get_ex(i, "name", &name); json_object_object_get_ex(i, "name", &name);
json_object_object_get_ex(i, "type", &type); json_object_object_get_ex(i, "type", &type);
@ -123,7 +123,7 @@ static void pretty_print_input(json_object *i) {
" Type: %s\n" " Type: %s\n"
" Identifier: %s\n" " Identifier: %s\n"
" Product ID: %d\n" " Product ID: %d\n"
" Vendor ID: %d\n\n"; " Vendor ID: %d\n";
printf(fmt, json_object_get_string(name), printf(fmt, json_object_get_string(name),
@ -131,6 +131,13 @@ static void pretty_print_input(json_object *i) {
json_object_get_string(id), json_object_get_string(id),
json_object_get_int(product), json_object_get_int(product),
json_object_get_int(vendor)); json_object_get_int(vendor));
if (json_object_object_get_ex(i, "xkb_active_layout_name", &kbdlayout)) {
printf(" Active Keyboard Layout: %s\n",
json_object_get_string(kbdlayout));
}
printf("\n");
} }
static void pretty_print_seat(json_object *i) { static void pretty_print_seat(json_object *i) {