Browse Source

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

Simulate textInput when IME is disabled
release/11.0.8
Benedikt Stebner 2 years ago
committed by Max Katz
parent
commit
2dc9227568
  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;
AvnInputModifiers _modifierState;
NSEvent* _lastMouseDownEvent;
bool _lastKeyHandled;
bool _lastKeyConsumeByInputContext;
AvnPixelSize _lastPixelSize;
NSObject<IRenderTarget>* _currentRenderTarget;
AvnPlatformResizeReason _resizeReason;
@ -457,27 +457,19 @@
auto physicalKey = PhysicalKeyFromScanCode(scanCode);
auto keySymbol = KeySymbolFromScanCode(scanCode, [event modifierFlags]);
auto keySymbolUtf8 = keySymbol == nullptr ? nullptr : [keySymbol UTF8String];
auto timestamp = static_cast<uint64_t>([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)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

Loading…
Cancel
Save