mirror of
https://github.com/swaywm/sway.git
synced 2024-12-30 17:06:40 +01:00
Merge pull request #3116 from harishkrupo/master
IPC: Send keyboard layout info in IPC_GET_INPUTS
This commit is contained in:
commit
3b8d4a9212
2 changed files with 31 additions and 2 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue