diff --git a/lcl/interfaces/cocoa/cocoaconfig.inc b/lcl/interfaces/cocoa/cocoaconfig.inc index 54ae17b91d..72b962d31b 100644 --- a/lcl/interfaces/cocoa/cocoaconfig.inc +++ b/lcl/interfaces/cocoa/cocoaconfig.inc @@ -39,6 +39,8 @@ var highestHandler: nil; // Event to call when there is no MainForm with MainForm.close onQuitApp: nil; + // Platform key Event modification function + keyEventToVK: nil; ); ); diff --git a/lcl/interfaces/cocoa/cocoaconfig.pas b/lcl/interfaces/cocoa/cocoaconfig.pas index 6036849167..5af9f4282f 100644 --- a/lcl/interfaces/cocoa/cocoaconfig.pas +++ b/lcl/interfaces/cocoa/cocoaconfig.pas @@ -148,10 +148,13 @@ type TCocoaApplicationEventHandler = function( event: NSEvent ): Boolean of object; // Need to pass to QueueAsyncCall which takes TDataEvent TCocoaApplicationOnAppQuitEvent = TDataEvent; + // Platform specific NSEvent key translation to VK Keycode function + TCocoaApplicationEventToVK = function(AEvent: NSEvent): Word; TCocoaConfigApplicationEvents = record highestHandler: TCocoaApplicationEventHandler; onQuitApp: TCocoaApplicationOnAppQuitEvent; + keyEventToVK: TCocoaApplicationEventToVK; end; TCocoaConfigApplication = record diff --git a/lcl/interfaces/cocoa/cocoawscommon.pas b/lcl/interfaces/cocoa/cocoawscommon.pas index 85618cf2cd..d37f6ba26a 100644 --- a/lcl/interfaces/cocoa/cocoawscommon.pas +++ b/lcl/interfaces/cocoa/cocoawscommon.pas @@ -595,6 +595,9 @@ begin else VKKeyCode := MacCodeToVK(KeyCode); + if Assigned(CocoaConfigApplication.events.keyEventToVK) then + VKKeyCode := CocoaConfigApplication.events.keyEventToVK(Event); + case VKKeyCode of // for sure, these are "non-printable" keys (see http://wiki.lazarus.freepascal.org/LCL_Key_Handling) VK_F1..VK_F24, // Function keys (F1-F12)