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;