summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bleh_darwin.m17
-rw-r--r--delegateuitask_darwin.m15
-rw-r--r--objc_darwin.h1
3 files changed, 13 insertions, 20 deletions
diff --git a/bleh_darwin.m b/bleh_darwin.m
index 7bb9344..b2f0fe7 100644
--- a/bleh_darwin.m
+++ b/bleh_darwin.m
@@ -64,20 +64,3 @@ void initBleh()
s_initTrackingArea = sel_getUid("initWithRect:options:owner:userInfo:");
}
-/*
-See uitask_darwin.go: we need to synthesize a NSEvent so -[NSApplication stop:] will work. We cannot simply init the default NSEvent though (it throws an exception) so we must do it "the right way". This involves a very convoluted initializer; we'll just do it here to keep things clean on the Go side (this will only be run once anyway, on program exit).
-*/
-
-id makeDummyEvent()
-{
- return objc_msgSend(c_NSEvent, s_newEvent,
- (NSUInteger) NSApplicationDefined, /* otherEventWithType: */
- NSMakePoint(0, 0), /* location: */
- (NSUInteger) 0, /* modifierFlags: */
- (double) 0, /* timestamp: */
- (NSInteger) 0, /* windowNumber: */
- nil, /* context: */
- (short) 0, /* subtype: */
- (NSInteger) 0, /* data1: */
- (NSInteger) 0); /* data2: */
-}
diff --git a/delegateuitask_darwin.m b/delegateuitask_darwin.m
index 5d2ec9e..91eb83b 100644
--- a/delegateuitask_darwin.m
+++ b/delegateuitask_darwin.m
@@ -9,6 +9,7 @@
#include <AppKit/NSApplication.h>
#include <AppKit/NSWindow.h>
#include <Foundation/NSAutoreleasePool.h>
+#include <AppKit/NSEvent.h>
@interface appDelegate : NSObject
@end
@@ -80,13 +81,23 @@ void douitask(id appDelegate, void *p)
void breakMainLoop(void)
{
+ NSEvent *e;
+
// -[NSApplication stop:] stops the event loop; it won't do a clean termination, but we're not too concerned with that (at least not on the other platforms either so)
// we can't call -[NSApplication terminate:] because that will just quit the program, ensuring we never leave ui.Go()
[NSApp stop:NSApp];
// simply calling -[NSApplication stop:] is not good enough, as the stop flag is only checked when an event comes in
// we have to create a "proper" event; a blank event will just throw an exception
- [NSApp postEvent:makeDummyEvent() // TODO inline this
- atStart:NO]; // not at start, just in case there are other events pending (TODO is this correct?)
+ e = [NSEvent otherEventWithType:NSApplicationDefined
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp:0
+ windowNumber:0
+ context:nil
+ subtype:0
+ data1:0
+ data2:0];
+ [NSApp postEvent:e atStart:NO]; // not at start, just in case there are other events pending (TODO is this correct?)
}
void cocoaMainLoop(void)
diff --git a/objc_darwin.h b/objc_darwin.h
index 42c7ce6..4c5c6d8 100644
--- a/objc_darwin.h
+++ b/objc_darwin.h
@@ -51,6 +51,5 @@ struct xpoint {
/* for uitask_darwin.go */
extern void initBleh();
-extern id makeDummyEvent();
#endif