summaryrefslogtreecommitdiff
path: root/src/devices/VirtualKeyboard.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-07-25 13:02:05 +0200
committerVaxry <vaxry@vaxry.net>2024-07-25 13:02:10 +0200
commitdaf5fad19034def8062acfd32e66bea78c62aaff (patch)
tree566871bbe62ab75d6c5745de25c6b19a24d92441 /src/devices/VirtualKeyboard.cpp
parent4beac91cbd791657cc53d6e483eb41bf4df1ec0c (diff)
keyboard: properly update keymap state and fd on keymap changes
needed for virtual keyboards that impose their own layouts. fixes #6991
Diffstat (limited to 'src/devices/VirtualKeyboard.cpp')
-rw-r--r--src/devices/VirtualKeyboard.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/devices/VirtualKeyboard.cpp b/src/devices/VirtualKeyboard.cpp
index 654ca9f5..548711c2 100644
--- a/src/devices/VirtualKeyboard.cpp
+++ b/src/devices/VirtualKeyboard.cpp
@@ -31,8 +31,13 @@ CVirtualKeyboard::CVirtualKeyboard(SP<CVirtualKeyboardV1Resource> keeb_) : keybo
});
});
listeners.keymap = keeb_->events.keymap.registerListener([this](std::any d) {
- auto E = std::any_cast<SKeymapEvent>(d);
- xkbKeymap = xkb_keymap_ref(E.keymap);
+ auto E = std::any_cast<SKeymapEvent>(d);
+ if (xkbKeymap)
+ xkb_keymap_unref(xkbKeymap);
+ xkbKeymap = xkb_keymap_ref(E.keymap);
+ keymapOverridden = true;
+ updateXKBTranslationState(xkbKeymap);
+ updateKeymapFD();
keyboardEvents.keymap.emit(d);
});