diff --git a/kiwmi/input/keyboard.c b/kiwmi/input/keyboard.c index ce4b26a..83543eb 100644 --- a/kiwmi/input/keyboard.c +++ b/kiwmi/input/keyboard.c @@ -127,11 +127,6 @@ keyboard_create(struct kiwmi_server *server, struct wlr_input_device *device) keyboard->server = server; keyboard->device = device; - struct xkb_rule_names rules = {0}; - struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - struct xkb_keymap *keymap = - xkb_map_new_from_names(context, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); - keyboard->modifiers.notify = keyboard_modifiers_notify; wl_signal_add(&device->keyboard->events.modifiers, &keyboard->modifiers); @@ -141,6 +136,10 @@ keyboard_create(struct kiwmi_server *server, struct wlr_input_device *device) keyboard->device_destroy.notify = keyboard_destroy_notify; wl_signal_add(&device->events.destroy, &keyboard->device_destroy); + struct xkb_rule_names rules = {0}; + struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + struct xkb_keymap *keymap = + xkb_map_new_from_names(context, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); wlr_keyboard_set_keymap(device->keyboard, keymap); xkb_keymap_unref(keymap); xkb_context_unref(context); diff --git a/kiwmi/luak/kiwmi_keyboard.c b/kiwmi/luak/kiwmi_keyboard.c index 52778fe..b2f8dad 100644 --- a/kiwmi/luak/kiwmi_keyboard.c +++ b/kiwmi/luak/kiwmi_keyboard.c @@ -16,6 +16,29 @@ #include "input/keyboard.h" #include "luak/kiwmi_lua_callback.h" +static int +l_kiwmi_keyboard_configure(lua_State *L) +{ + struct kiwmi_keyboard *keyboard = + *(struct kiwmi_keyboard **)luaL_checkudata(L, 1, "kiwmi_keyboard"); + + struct xkb_rule_names rules = { + .rules = luaL_checkstring(L, 2), + .model = luaL_checkstring(L, 3), + .layout = luaL_checkstring(L, 4), + .variant = luaL_checkstring(L, 5), + .options = luaL_checkstring(L, 6), + }; + wlr_log(WLR_INFO, " %s ", lua_tostring(L, 2)); + struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + struct xkb_keymap *keymap = + xkb_map_new_from_names(context, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); + wlr_keyboard_set_keymap(keyboard->device->keyboard, keymap); + xkb_keymap_unref(keymap); + xkb_context_unref(context); + return 0; +} + static int l_kiwmi_keyboard_modifiers(lua_State *L) { @@ -61,6 +84,7 @@ l_kiwmi_keyboard_modifiers(lua_State *L) static const luaL_Reg kiwmi_keyboard_methods[] = { {"modifiers", l_kiwmi_keyboard_modifiers}, + {"configure", l_kiwmi_keyboard_configure}, {"on", luaK_callback_register_dispatch}, {NULL, NULL}, }; diff --git a/lua_docs.md b/lua_docs.md index a587deb..e15e82e 100644 --- a/lua_docs.md +++ b/lua_docs.md @@ -121,6 +121,11 @@ These are: `shift`, `caps`, `ctrl`, `alt`, `mod2`, `mod3`, `super`, and `mod5`. Used to register event listeners. +#### keyboard:configure(rules, model, layout, variant, options) + +The parameters are all strings for more information see xkbcommon library. + + ### Events #### destroy