diff options
Diffstat (limited to 'src/devices/IKeyboard.cpp')
| -rw-r--r-- | src/devices/IKeyboard.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/devices/IKeyboard.cpp b/src/devices/IKeyboard.cpp index 4f2281b7..ad9e40d8 100644 --- a/src/devices/IKeyboard.cpp +++ b/src/devices/IKeyboard.cpp @@ -266,6 +266,19 @@ void IKeyboard::updateXKBTranslationState(xkb_keymap* const keymap) { xkb_context_unref(PCONTEXT); } +std::optional<xkb_layout_index_t> IKeyboard::getActiveLayoutIndex() { + const auto KEYMAP = m_xkbKeymap; + const auto STATE = m_xkbState; + const auto LAYOUTSNUM = xkb_keymap_num_layouts(KEYMAP); + + for (xkb_layout_index_t i = 0; i < LAYOUTSNUM; ++i) { + if (xkb_state_layout_index_is_active(STATE, i, XKB_STATE_LAYOUT_EFFECTIVE) == 1) + return i; + } + + return {}; +} + std::string IKeyboard::getActiveLayout() { const auto KEYMAP = m_xkbKeymap; const auto STATE = m_xkbState; |
