diff options
| author | JS Deck <jsdeckerido@gmail.com> | 2025-09-20 12:57:39 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-20 17:57:39 +0200 |
| commit | 838439080a9feaac3386d694dc7f8463e41c51df (patch) | |
| tree | 11492db963560ea2016b089356fab0f61dca3b6a /src/managers/input/InputManager.cpp | |
| parent | 6a88f2e8800d4540ecbbb0d5b3d7f85a05387300 (diff) | |
vkeyboard: update cached mods before IME; add share_states = 2 config option (#11720)
Diffstat (limited to 'src/managers/input/InputManager.cpp')
| -rw-r--r-- | src/managers/input/InputManager.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index ea164842..fa7efb6a 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1479,6 +1479,7 @@ void CInputManager::onKeyboardMod(SP<IKeyboard> pKeyboard) { auto MODS = pKeyboard->m_modifiersState; const auto ALLMODS = shareModsFromAllKBs(MODS.depressed); MODS.depressed = ALLMODS; + m_lastMods = MODS.depressed; const auto IME = m_relay.m_inputMethod.lock(); @@ -1488,7 +1489,6 @@ void CInputManager::onKeyboardMod(SP<IKeyboard> pKeyboard) { } else { g_pSeatManager->setKeyboard(pKeyboard); g_pSeatManager->sendKeyboardMods(MODS.depressed, MODS.latched, MODS.locked, MODS.group); - m_lastMods = MODS.depressed; } updateKeyboardsLeds(pKeyboard); @@ -1506,12 +1506,20 @@ void CInputManager::onKeyboardMod(SP<IKeyboard> pKeyboard) { } bool CInputManager::shouldIgnoreVirtualKeyboard(SP<IKeyboard> pKeyboard) { + if (!pKeyboard) + return true; + if (!pKeyboard->isVirtual()) return false; - auto client = pKeyboard->getClient(); + const auto CLIENT = pKeyboard->getClient(); + + const auto DISALLOWACTION = CLIENT && !m_relay.m_inputMethod.expired() && m_relay.m_inputMethod->grabClient() == CLIENT; + + if (DISALLOWACTION) + pKeyboard->setShareStatesAuto(false); - return !pKeyboard || (client && !m_relay.m_inputMethod.expired() && m_relay.m_inputMethod->grabClient() == client); + return DISALLOWACTION; } void CInputManager::refocus(std::optional<Vector2D> overridePos) { |
