summaryrefslogtreecommitdiff
path: root/src/devices/IKeyboard.cpp
diff options
context:
space:
mode:
authorJS Deck <jsdeckerido@gmail.com>2025-08-04 16:29:39 -0300
committerGitHub <noreply@github.com>2025-08-04 21:29:39 +0200
commit2be309de1df5e4262175fbcc58e6dd8de4e0e6d3 (patch)
tree866629ba5a4b9b45d8720383e4332726444f3566 /src/devices/IKeyboard.cpp
parent6491bb4fb7c7e86d9168a104d5b87ace4e1b978d (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.cpp37
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;
+}