Browse Source

Fix InputContext event handling

pull/11021/head
Benedikt Stebner 4 years ago
parent
commit
bc6773f930
  1. 26
      native/Avalonia.Native/src/OSX/AvnView.mm

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

@ -521,9 +521,17 @@
- (void)keyDown:(NSEvent *)event - (void)keyDown:(NSEvent *)event
{ {
[self keyboardEvent:event withType:KeyDown]; _lastKeyHandled = false;
_lastKeyHandled = [[self inputContext] handleEvent:event];
[super keyDown:event]; [[self inputContext] handleEvent:event];
if(!_lastKeyHandled){
[self keyboardEvent:event withType:KeyDown];
}
}
- (void) doCommandBySelector:(SEL)selector{
} }
- (void)keyUp:(NSEvent *)event - (void)keyUp:(NSEvent *)event
@ -578,6 +586,8 @@
- (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange - (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange
{ {
_lastKeyHandled = true;
if([string isKindOfClass:[NSAttributedString class]]) if([string isKindOfClass:[NSAttributedString class]])
{ {
_markedText = [[NSMutableAttributedString alloc] initWithAttributedString:string]; _markedText = [[NSMutableAttributedString alloc] initWithAttributedString:string];
@ -619,11 +629,15 @@
- (void)insertText:(id)string replacementRange:(NSRange)replacementRange - (void)insertText:(id)string replacementRange:(NSRange)replacementRange
{ {
_lastKeyHandled = true;
[self unmarkText]; [self unmarkText];
if(_parent != nullptr) if(_parent != nullptr)
{ {
_lastKeyHandled = _parent->BaseEvents->RawTextInputEvent(0, [string UTF8String]); uint32_t timestamp = static_cast<uint32_t>([NSDate timeIntervalSinceReferenceDate] * 1000);
_lastKeyHandled = _parent->BaseEvents->RawTextInputEvent(timestamp, [string UTF8String]);
} }
[[self inputContext] invalidateCharacterCoordinates]; [[self inputContext] invalidateCharacterCoordinates];
@ -746,9 +760,9 @@
} }
- (void) setText:(NSString *)text{ - (void) setText:(NSString *)text{
[_text setString:text]; [self unmarkText];
[[self inputContext] discardMarkedText]; [_text setString:text];
} }
- (void) setSelection:(int)start :(int)end{ - (void) setSelection:(int)start :(int)end{

Loading…
Cancel
Save