summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/managers/input/InputManager.cpp')
-rw-r--r--src/managers/input/InputManager.cpp18
1 files changed, 13 insertions, 5 deletions
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);
}