Browse Source

Always process key events via input context unless it is disabled by user code (#13143)

Simulate textInput when IME is disabled
pull/13153/head
Benedikt Stebner 3 years ago
committed by GitHub
parent
commit
4ef901b22b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 36
      native/Avalonia.Native/src/OSX/AvnView.mm

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

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

Loading…
Cancel
Save