diff options
| author | JS Deck <jsdeckerido@gmail.com> | 2025-08-04 16:29:39 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-04 21:29:39 +0200 |
| commit | 2be309de1df5e4262175fbcc58e6dd8de4e0e6d3 (patch) | |
| tree | 866629ba5a4b9b45d8720383e4332726444f3566 /src/devices/IKeyboard.cpp | |
| parent | 6491bb4fb7c7e86d9168a104d5b87ace4e1b978d (diff) | |
virtualkeyboard: Add options to skip releasing pressed keys on close and to skip sharing key states (#11214)
Diffstat (limited to 'src/devices/IKeyboard.cpp')
| -rw-r--r-- | src/devices/IKeyboard.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/devices/IKeyboard.cpp b/src/devices/IKeyboard.cpp index 89ad8c16..0a22eb6e 100644 --- a/src/devices/IKeyboard.cpp +++ b/src/devices/IKeyboard.cpp @@ -378,19 +378,6 @@ bool IKeyboard::updateModifiersState() { } void IKeyboard::updateXkbStateWithKey(uint32_t xkbKey, bool pressed) { - - const auto contains = std::ranges::find(m_pressedXKB, xkbKey) != m_pressedXKB.end(); - - if (contains && pressed) - return; - if (!contains && !pressed) - return; - - if (contains) - std::erase(m_pressedXKB, xkbKey); - else - m_pressedXKB.emplace_back(xkbKey); - xkb_state_update_key(m_xkbState, xkbKey, pressed ? XKB_KEY_DOWN : XKB_KEY_UP); if (updateModifiersState()) { @@ -405,3 +392,27 @@ void IKeyboard::updateXkbStateWithKey(uint32_t xkbKey, bool pressed) { }); } } + +bool IKeyboard::updatePressed(uint32_t key, bool pressed) { + const auto contains = getPressed(key); + + if (contains && pressed) + return false; + if (!contains && !pressed) + return false; + + if (contains) + std::erase(m_pressed, key); + else + m_pressed.emplace_back(key); + + return true; +} + +bool IKeyboard::getPressed(uint32_t key) { + return std::ranges::contains(m_pressed, key); +} + +bool IKeyboard::shareStates() { + return m_shareStates; +} |
