summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
authorJS Deck <jsdeckerido@gmail.com>2025-09-20 12:57:39 -0300
committerGitHub <noreply@github.com>2025-09-20 17:57:39 +0200
commit838439080a9feaac3386d694dc7f8463e41c51df (patch)
tree11492db963560ea2016b089356fab0f61dca3b6a /src/managers/input/InputManager.cpp
parent6a88f2e8800d4540ecbbb0d5b3d7f85a05387300 (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.cpp14
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) {