From 08e86ea9b3e4d0b24f592ab9d2f5650de40f6bed Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 15 May 2014 23:04:30 -0400 Subject: [PATCH] Removed the dummy NSEvent code from bleh_darwin.m and rewrote it in Objective-C in delegateuitask_darwin.m. And now to nuke bleh_darwin.m and change all the int64_ts to intptr_ts and merge the .h files... --- bleh_darwin.m | 17 ----------------- delegateuitask_darwin.m | 15 +++++++++++++-- objc_darwin.h | 1 - 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 #include #include +#include @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