summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video/cocoa/cocoa_v.mm17
-rw-r--r--src/video/cocoa/event.mm21
2 files changed, 28 insertions, 10 deletions
diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm
index 11ba8ab84..99f2c3fed 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 40bf57eb6..81b9db1d2 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 <sys/time.h> /* 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;