aboutsummaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorHarry Jeffery <harry@exec64.co.uk>2019-08-13 01:12:50 +0100
committerHarry Jeffery <harry@exec64.co.uk>2019-08-13 01:14:56 +0100
commit2d0eee125442524f2df009ebd6d4df166a74d6f9 (patch)
treec27a7eb3153da94340ed75f94130a3e1bf1bda36 /src/keyboard.c
parent07b742e9da2a12d163d7733aaefc5ae6bce555b6 (diff)
downloadimv-2d0eee125442524f2df009ebd6d4df166a74d6f9.tar.gz
Wayland: Detect keyboard layout automatically
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 16b2c9d..af79006 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -22,9 +22,9 @@ struct imv_keyboard *imv_keyboard_create(void)
struct xkb_rule_names names = {
.rules = NULL,
.model = NULL,
- .layout = "gb",
+ .layout = NULL,
.variant = NULL,
- .options = "caps:escape,compose:ralt"
+ .options = NULL,
};
keyboard->keymap = xkb_keymap_new_from_names(keyboard->context, &names, 0);
assert(keyboard->keymap);
@@ -116,3 +116,11 @@ size_t imv_keyboard_get_text(struct imv_keyboard *keyboard, int scancode, char *
{
return xkb_state_key_get_utf8(keyboard->state, scancode + scancode_offset, buf, buflen);
}
+
+void imv_keyboard_set_keymap(struct imv_keyboard *keyboard, const char *keymap)
+{
+ xkb_keymap_unref(keyboard->keymap);
+ keyboard->keymap = xkb_keymap_new_from_string(keyboard->context, keymap, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
+ xkb_state_unref(keyboard->state);
+ keyboard->state = xkb_state_new(keyboard->keymap);
+}