diff options
Diffstat (limited to 'src/managers/input/InputManager.cpp')
| -rw-r--r-- | src/managers/input/InputManager.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index c60b85bf..c552910c 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -887,3 +887,22 @@ uint32_t CInputManager::accumulateModsFromAllKBs() { return finalMask; } + +std::string CInputManager::getActiveLayoutForKeyboard(SKeyboard* pKeyboard) { + const auto WLRKB = wlr_keyboard_from_input_device(pKeyboard->keyboard); + const auto KEYMAP = WLRKB->keymap; + const auto STATE = WLRKB->xkb_state; + const auto LAYOUTSNUM = xkb_keymap_num_layouts(KEYMAP); + + for (auto i = 0; i < LAYOUTSNUM; ++i) { + if (xkb_state_layout_index_is_active(STATE, i, XKB_STATE_LAYOUT_EFFECTIVE)) { + const auto LAYOUTNAME = xkb_keymap_layout_get_name(KEYMAP, i); + + if (LAYOUTNAME) + return std::string(LAYOUTNAME); + return "error"; + } + } + + return "none"; +} |
