From 1a0824eaf6592f5764604de722967eb213286284 Mon Sep 17 00:00:00 2001 From: michi_cc Date: Mon, 5 Aug 2013 20:37:37 +0000 Subject: [PATCH] (svn r25687) -Codechange: [OSX] Pass text input directly down to the text handling. --- src/video/cocoa/cocoa_v.mm | 17 +++++++++++++++++ src/video/cocoa/event.mm | 21 +++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 11ba8ab849..99f2c3fedd 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -788,6 +788,23 @@ void cocoaReleaseAutoreleasePool() if (_cocoa_subdriver != NULL) UndrawMouseCursor(); _cursor.in_window = false; } + + +/** Insert the given text at the caret. */ +- (void)insertText:(id)aString +{ + NSString *s = [ aString isKindOfClass:[ NSAttributedString class ] ] ? [ aString string ] : (NSString *)aString; + + HandleTextInput(NULL, true); + HandleTextInput([ s UTF8String ]); +} + +/** Invoke the selector if we implement it. */ +- (void)doCommandBySelector:(SEL)aSelector +{ + if ([ self respondsToSelector:aSelector ]) [ self performSelector:aSelector ]; +} + @end diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index 40bf57eb6e..81b9db1d24 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -35,6 +35,7 @@ #include "../../network/network.h" #include "../../core/random_func.hpp" #include "../../texteff.hpp" +#include "../../window_func.h" #import /* gettimeofday */ @@ -399,7 +400,6 @@ static bool QZ_PollEvent() NSString *chars; NSPoint pt; - NSText *fieldEditor; switch ([ event type ]) { case NSMouseMoved: case NSOtherMouseDragged: @@ -516,17 +516,18 @@ static bool QZ_PollEvent() break; } - fieldEditor = [[ event window ] fieldEditor:YES forObject:nil ]; - [ fieldEditor setString:@"" ]; - [ fieldEditor interpretKeyEvents: [ NSArray arrayWithObject:event ] ]; - - chars = [ event characters ]; - if ([ chars length ] == 0) { + if (EditBoxInGlobalFocus()) { + [ _cocoa_subdriver->cocoaview interpretKeyEvents:[ NSArray arrayWithObject:event ] ]; QZ_KeyEvent([ event keyCode ], 0, YES); } else { - QZ_KeyEvent([ event keyCode ], [ chars characterAtIndex:0 ], YES); - for (uint i = 1; i < [ chars length ]; i++) { - QZ_KeyEvent(0, [ chars characterAtIndex:i ], YES); + chars = [ event characters ]; + if ([ chars length ] == 0) { + QZ_KeyEvent([ event keyCode ], 0, YES); + } else { + QZ_KeyEvent([ event keyCode ], [ chars characterAtIndex:0 ], YES); + for (uint i = 1; i < [ chars length ]; i++) { + QZ_KeyEvent(0, [ chars characterAtIndex:i ], YES); + } } } break;