diff --git a/src/Avalonia.Native.OSX/window.mm b/src/Avalonia.Native.OSX/window.mm index 37a0d13b31..f15246595d 100644 --- a/src/Avalonia.Native.OSX/window.mm +++ b/src/Avalonia.Native.OSX/window.mm @@ -92,6 +92,7 @@ protected: NSTrackingArea* _area; bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isMouseOver; NSEvent* _lastMouseDownEvent; + bool _lastKeyHandled; } - (NSEvent*) lastMouseDownEvent @@ -312,7 +313,12 @@ protected: auto timestamp = [event timestamp] * 1000; auto modifiers = [self getModifiers:[event modifierFlags]]; - _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, Delete); + _lastKeyHandled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, Delete); +} + +- (BOOL)performKeyEquivalent:(NSEvent *)event +{ + return _lastKeyHandled; } - (void)keyDown:(NSEvent *)event diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index 095005c2ce..5f4307114c 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -106,9 +106,9 @@ namespace Avalonia.Native _parent.RawMouseEvent(type, timeStamp, modifiers, point, delta); } - public void RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) + public bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) { - _parent.RawKeyEvent(type, timeStamp, modifiers, key); + return _parent.RawKeyEvent(type, timeStamp, modifiers, key); } } @@ -118,9 +118,13 @@ namespace Avalonia.Native } - public void RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) + public bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) { - Input?.Invoke(new RawKeyEventArgs(_keyboard, timeStamp, (RawKeyEventType)type, (Key)key, (InputModifiers)modifiers)); + var args = new RawKeyEventArgs(_keyboard, timeStamp, (RawKeyEventType)type, (Key)key, (InputModifiers)modifiers); + + Input?.Invoke(args); + + return args.Handled; } public void RawMouseEvent(AvnRawMouseEventType type, uint timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) diff --git a/src/headers/avalonia-native.h b/src/headers/avalonia-native.h index 30b66b0c25..9a0c00550f 100644 --- a/src/headers/avalonia-native.h +++ b/src/headers/avalonia-native.h @@ -98,7 +98,7 @@ AVNCOM(IAvnWindowBaseEvents, 04) : IUnknown AvnPoint point, AvnVector delta) = 0; - virtual void RawKeyEvent (AvnRawKeyEventType type, unsigned int timeStamp, AvnInputModifiers modifiers, unsigned int key) = 0; + virtual bool RawKeyEvent (AvnRawKeyEventType type, unsigned int timeStamp, AvnInputModifiers modifiers, unsigned int key) = 0; };