diff --git a/native/Avalonia.Native/src/OSX/AvnView.mm b/native/Avalonia.Native/src/OSX/AvnView.mm index 4027c3e1194..2f5fe3b27aa 100644 --- a/native/Avalonia.Native/src/OSX/AvnView.mm +++ b/native/Avalonia.Native/src/OSX/AvnView.mm @@ -15,7 +15,7 @@ @implementation AvnView bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed; AvnInputModifiers _modifierState; NSEvent* _lastMouseDownEvent; - bool _lastKeyHandled; + bool _lastKeyConsumeByInputContext; AvnPixelSize _lastPixelSize; NSObject* _currentRenderTarget; AvnPlatformResizeReason _resizeReason; @@ -457,27 +457,19 @@ - (void) keyboardEvent: (NSEvent *) event withType: (AvnRawKeyEventType)type auto physicalKey = PhysicalKeyFromScanCode(scanCode); auto keySymbol = KeySymbolFromScanCode(scanCode, [event modifierFlags]); auto keySymbolUtf8 = keySymbol == nullptr ? nullptr : [keySymbol UTF8String]; - + auto timestamp = static_cast([event timestamp] * 1000); auto modifiers = [self getModifiers:[event modifierFlags]]; - auto handled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, key, physicalKey, keySymbolUtf8); - if (key != AvnKeyLeftCtrl && key != AvnKeyRightCtrl) { - _lastKeyHandled = handled; - } else { - _lastKeyHandled = false; + if(!_lastKeyConsumeByInputContext || key <= 32){ + auto handled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, key, physicalKey, keySymbolUtf8); + + if(key > 32 && type == KeyDown && !handled){ + _parent->BaseEvents->RawTextInputEvent(timestamp, keySymbolUtf8); + } } } -- (BOOL)performKeyEquivalent:(NSEvent *)event -{ - bool result = _lastKeyHandled; - - _lastKeyHandled = false; - - return result; -} - - (void)flagsChanged:(NSEvent *)event { auto newModifierState = [self getModifiers:[event modifierFlags]]; @@ -537,15 +529,13 @@ - (void)flagsChanged:(NSEvent *)event - (void)keyDown:(NSEvent *)event { - _lastKeyHandled = false; - - [self keyboardEvent:event withType:KeyDown]; - - BOOL isKeyDownConsumed = [[self inputContext] handleEvent:event]; + _lastKeyConsumeByInputContext = false; - if(!_lastKeyHandled){ - _lastKeyHandled = isKeyDownConsumed == YES; + if(_parent->InputMethod->IsActive()){ + _lastKeyConsumeByInputContext = [[self inputContext] handleEvent:event] == YES; } + + [self keyboardEvent:event withType:KeyDown]; } - (void)keyUp:(NSEvent *)event