Mercurial > hg > openttd
changeset 20712:cfe87e917bcd draft
-Codechange: [OSX] Pass text input directly down to the text handling.
author | Michael Lutz <michi@icosahedron.de> |
---|---|
date | Thu, 25 Jul 2013 01:05:11 +0200 |
parents | 78fe2d6e7dba |
children | 6baaec6722b9 |
files | src/video/cocoa/cocoa_v.mm src/video/cocoa/event.mm |
diffstat | 2 files changed, 28 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -788,6 +788,23 @@ 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
--- 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 <sys/time.h> /* gettimeofday */ @@ -399,7 +400,6 @@ NSString *chars; NSPoint pt; - NSText *fieldEditor; switch ([ event type ]) { case NSMouseMoved: case NSOtherMouseDragged: @@ -516,17 +516,18 @@ 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;