diff options
Diffstat (limited to 'src/managers')
| -rw-r--r-- | src/managers/SeatManager.cpp | 2 | ||||
| -rw-r--r-- | src/managers/input/InputManager.cpp | 18 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index c1b13ccb..a58bca72 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -94,7 +94,7 @@ void CSeatManager::setKeyboard(SP<IKeyboard> KEEB) { } void CSeatManager::updateActiveKeyboardData() { - if (keyboard) + if (keyboard && keyboard->wlr()) PROTO::seat->updateRepeatInfo(keyboard->wlr()->repeat_info.rate, keyboard->wlr()->repeat_info.delay); PROTO::seat->updateKeymap(); } diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 033f4d6d..ed8e834c 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1226,12 +1226,20 @@ void CInputManager::destroyKeyboard(SP<IKeyboard> pKeyboard) { std::erase_if(m_vKeyboards, [pKeyboard](const auto& other) { return other == pKeyboard; }); if (m_vKeyboards.size() > 0) { - const auto PNEWKEYBOARD = m_vKeyboards.back(); - g_pSeatManager->setKeyboard(PNEWKEYBOARD); - PNEWKEYBOARD->active = true; - } else { + bool found = false; + for (auto& k : m_vKeyboards | std::views::reverse) { + if (!k->wlr()) + continue; + + g_pSeatManager->setKeyboard(k); + found = true; + break; + } + + if (!found) + g_pSeatManager->setKeyboard(nullptr); + } else g_pSeatManager->setKeyboard(nullptr); - } removeFromHIDs(pKeyboard); } |
