diff options
| author | Vaxry <vaxry@vaxry.net> | 2024-07-25 13:02:05 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2024-07-25 13:02:10 +0200 |
| commit | daf5fad19034def8062acfd32e66bea78c62aaff (patch) | |
| tree | 566871bbe62ab75d6c5745de25c6b19a24d92441 /src/devices/VirtualKeyboard.cpp | |
| parent | 4beac91cbd791657cc53d6e483eb41bf4df1ec0c (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.cpp | 9 |
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); }); |
