diff options
| author | Sungyoon Cho <sungyoon@sungyooncho.dev> | 2024-05-15 00:14:43 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-14 16:14:43 +0100 |
| commit | d0a4a0e0d8ecc0a47c0bcfbf84c090cae8cee7af (patch) | |
| tree | c30bdc02ec7bd66f1f652c00d11878addacea5dc /src/managers/input/InputManager.cpp | |
| parent | 1584679004435d93d5fe2dd794d2aefaa0c9574a (diff) | |
input: fix modifier and leds (#6062)
Diffstat (limited to 'src/managers/input/InputManager.cpp')
| -rw-r--r-- | src/managers/input/InputManager.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 1d09dbb9..958fb255 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1239,6 +1239,26 @@ void CInputManager::destroyTabletPad(SP<CTabletPad> pad) { removeFromHIDs(pad); } +void CInputManager::updateKeyboardsLeds(SP<IKeyboard> pKeyboard) { + if (!pKeyboard) + return; + + auto keyboard = pKeyboard->wlr(); + + if (!keyboard || keyboard->xkb_state == nullptr) + return; + + uint32_t leds = 0; + for (uint32_t i = 0; i < WLR_LED_COUNT; ++i) { + if (xkb_state_led_index_is_active(keyboard->xkb_state, keyboard->led_indexes[i])) + leds |= (1 << i); + } + + for (auto& k : m_vKeyboards) { + k->updateLEDs(leds); + } +} + void CInputManager::onKeyboardKey(std::any event, SP<IKeyboard> pKeyboard) { if (!pKeyboard->enabled) return; @@ -1271,9 +1291,7 @@ void CInputManager::onKeyboardKey(std::any event, SP<IKeyboard> pKeyboard) { wlr_seat_keyboard_notify_key(g_pCompositor->m_sSeat.seat, e.timeMs, e.keycode, e.state); } - for (auto& k : m_vKeyboards) { - k->updateLEDs(); - } + updateKeyboardsLeds(pKeyboard); } } @@ -1299,9 +1317,7 @@ void CInputManager::onKeyboardMod(SP<IKeyboard> pKeyboard) { wlr_seat_keyboard_notify_modifiers(g_pCompositor->m_sSeat.seat, &MODS); } - for (auto& k : m_vKeyboards) { - k->updateLEDs(); - } + updateKeyboardsLeds(pKeyboard); if (PWLRKB->modifiers.group != pKeyboard->activeLayout) { pKeyboard->activeLayout = PWLRKB->modifiers.group; |
