Skip to content

Commit 2dc9227

Browse files
Gillibaldmaxkatz6
authored andcommitted
Always process key events via input context unless it is disabled by user code (#13143)
Simulate textInput when IME is disabled
1 parent b19bff8 commit 2dc9227

File tree

1 file changed

+13
-23
lines changed

1 file changed

+13
-23
lines changed

native/Avalonia.Native/src/OSX/AvnView.mm

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ @implementation AvnView
1515
bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed;
1616
AvnInputModifiers _modifierState;
1717
NSEvent* _lastMouseDownEvent;
18-
bool _lastKeyHandled;
18+
bool _lastKeyConsumeByInputContext;
1919
AvnPixelSize _lastPixelSize;
2020
NSObject<IRenderTarget>* _currentRenderTarget;
2121
AvnPlatformResizeReason _resizeReason;
@@ -457,27 +457,19 @@ - (void) keyboardEvent: (NSEvent *) event withType: (AvnRawKeyEventType)type
457457
auto physicalKey = PhysicalKeyFromScanCode(scanCode);
458458
auto keySymbol = KeySymbolFromScanCode(scanCode, [event modifierFlags]);
459459
auto keySymbolUtf8 = keySymbol == nullptr ? nullptr : [keySymbol UTF8String];
460-
460+
461461
auto timestamp = static_cast<uint64_t>([event timestamp] * 1000);
462462
auto modifiers = [self getModifiers:[event modifierFlags]];
463463

464-
auto handled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, key, physicalKey, keySymbolUtf8);
465-
if (key != AvnKeyLeftCtrl && key != AvnKeyRightCtrl) {
466-
_lastKeyHandled = handled;
467-
} else {
468-
_lastKeyHandled = false;
464+
if(!_lastKeyConsumeByInputContext || key <= 32){
465+
auto handled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, key, physicalKey, keySymbolUtf8);
466+
467+
if(key > 32 && type == KeyDown && !handled){
468+
_parent->BaseEvents->RawTextInputEvent(timestamp, keySymbolUtf8);
469+
}
469470
}
470471
}
471472

472-
- (BOOL)performKeyEquivalent:(NSEvent *)event
473-
{
474-
bool result = _lastKeyHandled;
475-
476-
_lastKeyHandled = false;
477-
478-
return result;
479-
}
480-
481473
- (void)flagsChanged:(NSEvent *)event
482474
{
483475
auto newModifierState = [self getModifiers:[event modifierFlags]];
@@ -537,15 +529,13 @@ - (void)flagsChanged:(NSEvent *)event
537529

538530
- (void)keyDown:(NSEvent *)event
539531
{
540-
_lastKeyHandled = false;
541-
542-
[self keyboardEvent:event withType:KeyDown];
543-
544-
BOOL isKeyDownConsumed = [[self inputContext] handleEvent:event];
532+
_lastKeyConsumeByInputContext = false;
545533

546-
if(!_lastKeyHandled){
547-
_lastKeyHandled = isKeyDownConsumed == YES;
534+
if(_parent->InputMethod->IsActive()){
535+
_lastKeyConsumeByInputContext = [[self inputContext] handleEvent:event] == YES;
548536
}
537+
538+
[self keyboardEvent:event withType:KeyDown];
549539
}
550540

551541
- (void)keyUp:(NSEvent *)event

0 commit comments

Comments
 (0)