From 432f975283eb4e0e3941fbb7048af13e0bb0984c Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 5 Feb 2025 15:22:24 +0700 Subject: [PATCH] fix(developer): support non-US base keyboard layouts in debuggers Keyman Core expects US English virtual key codes, so make sure that the debuggers translate the key codes they receive from Windows to the hard- coded values for US English, as defined in ScanCodeMap. Fixes: #13052 --- .../child/Keyman.Developer.UI.Debug.UfrmLdmlKeyboardDebug.pas | 4 ++-- developer/src/tike/child/UfrmDebug.pas | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/developer/src/tike/child/Keyman.Developer.UI.Debug.UfrmLdmlKeyboardDebug.pas b/developer/src/tike/child/Keyman.Developer.UI.Debug.UfrmLdmlKeyboardDebug.pas index 1712523026..1e22070ad7 100644 --- a/developer/src/tike/child/Keyman.Developer.UI.Debug.UfrmLdmlKeyboardDebug.pas +++ b/developer/src/tike/child/Keyman.Developer.UI.Debug.UfrmLdmlKeyboardDebug.pas @@ -39,7 +39,7 @@ uses UframeTextEditor, UfrmMDIEditor, UfrmTike, - UserMessages; + UserMessages, Keyman.Developer.UI.RichEdit41; type TLdmlDebugUIStatus = ( @@ -340,7 +340,7 @@ begin if not SetKeyEventContext then Exit(False); - if km_core_process_event(FDebugCore.State, Message.WParam, modifier, 1, KM_CORE_EVENT_FLAG_DEFAULT) = KM_CORE_STATUS_OK then + if km_core_process_event(FDebugCore.State, VKToScanCodeToVK(Message.WParam, GetKeyboardLayout(0)), modifier, 1, KM_CORE_EVENT_FLAG_DEFAULT) = KM_CORE_STATUS_OK then begin // Process keystroke -- true = swallow keystroke Result := True; diff --git a/developer/src/tike/child/UfrmDebug.pas b/developer/src/tike/child/UfrmDebug.pas index d322d406a7..36ef51d291 100644 --- a/developer/src/tike/child/UfrmDebug.pas +++ b/developer/src/tike/child/UfrmDebug.pas @@ -41,7 +41,7 @@ uses UfrmDebugStatus, UfrmMDIEditor, UfrmTike, - UserMessages; + UserMessages, Keyman.Developer.UI.RichEdit41; type TDebugLineEvent = procedure(Sender: TObject; ALine: Integer) of object; @@ -465,7 +465,7 @@ begin if not SetKeyEventContext then Exit(False); - if km_core_process_event(FDebugCore.State, Message.WParam, modifier, 1, KM_CORE_EVENT_FLAG_DEFAULT) = KM_CORE_STATUS_OK then + if km_core_process_event(FDebugCore.State, VKToScanCodeToVK(Message.WParam, GetKeyboardLayout(0)), modifier, 1, KM_CORE_EVENT_FLAG_DEFAULT) = KM_CORE_STATUS_OK then begin // Process keystroke -- true = swallow keystroke Result := True;