From aedcf2476d41f4cb0779030af173fabf2b70a4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 3 Feb 2025 18:38:15 +0100 Subject: [PATCH] virtualkeyboard: update keymap when it changed load current keymap on start Change-Id: I1030cf5aaf9641f7e915f8fc10dec3144cab014f Reviewed-on: https://review.haiku-os.org/c/haiku/+/8904 Reviewed-by: waddlesplash --- .../virtualkeyboard/VirtualKeyboardInputDevice.cpp | 2 ++ .../devices/virtualkeyboard/VirtualKeyboardWindow.cpp | 8 +++++--- .../devices/virtualkeyboard/VirtualKeyboardWindow.h | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp index 0d82a1a30f..004796aae7 100644 --- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp +++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp @@ -59,5 +59,7 @@ status_t VirtualKeyboardInputDevice::Control(const char* name, void* cookie, uint32 command, BMessage* message) { + if (command == B_KEY_MAP_CHANGED) + fKeyboardWindow->PostMessage(kKeymapChange); return B_OK; } diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp index 7f23e007dd..21fc82c462 100644 --- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp +++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp @@ -51,9 +51,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow(BInputServerDevice* dev) _LoadLayouts(fLayoutMenu); _LoadFonts(); - KeymapListItem* current = static_cast(fMapListView->LastItem()); - fCurrentKeymap.Load(current->EntryRef()); - + fCurrentKeymap.SetToCurrent(); fKeyboardView = new KeyboardLayoutView("Keyboard", fDevice); fKeyboardView->GetKeyboardLayout()->SetDefault(); @@ -155,6 +153,10 @@ VirtualKeyboardWindow::_LoadFonts() void VirtualKeyboardWindow::MessageReceived(BMessage* message) { + if (message->what == kKeymapChange) { + fCurrentKeymap.SetToCurrent(); + fKeyboardView->SetKeymap(&fCurrentKeymap); + } BWindow::MessageReceived(message); } diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h index 44850c2116..2474a993ff 100644 --- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h +++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h @@ -16,6 +16,9 @@ class BDirectory; class BListView; class BMenu; +static const uint32 kKeymapChange = 'vKCG'; + + class VirtualKeyboardWindow : public BWindow { public: VirtualKeyboardWindow(BInputServerDevice* dev);