X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fcocoa%2Fcocoadisplay.m;h=c6485a76ef5bbbbbe4ce28ab6141b0ce7dd60209;hb=6ede8137c8247f1f7d82ed7dcaad50d3f4baae0c;hp=3445c176cad0911337030543c1e52ae30f441c36;hpb=88c49198486808f1b53f4417c387feb478e9b1c7;p=libs%2Fgui.git diff --git a/source/graphics/cocoa/cocoadisplay.m b/source/graphics/cocoa/cocoadisplay.m index 3445c17..c6485a7 100644 --- a/source/graphics/cocoa/cocoadisplay.m +++ b/source/graphics/cocoa/cocoadisplay.m @@ -1,4 +1,8 @@ +#include +#include #import +#import +#import #import #include "cocoadisplay.h" @@ -7,6 +11,7 @@ void convert_event(NSEvent *, CocoaEvent *); struct _CocoaDisplay { NSApplication *app; + NSAutoreleasePool *arp; CFMutableArrayRef event_queue; }; @@ -16,10 +21,13 @@ void free_event(CFAllocatorRef, const void *); CocoaDisplay *create_display() { CocoaDisplay *display = (CocoaDisplay *)malloc(sizeof(CocoaDisplay)); + display->arp = [[NSAutoreleasePool alloc] init]; display->app = [NSApplication sharedApplication]; +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 // This makes windows appear when run from terminal if([display->app respondsToSelector:@selector(setActivationPolicy:)]) [display->app setActivationPolicy:NSApplicationActivationPolicyRegular]; +#endif [display->app finishLaunching]; CFArrayCallBacks callbacks; @@ -36,6 +44,7 @@ CocoaDisplay *create_display() void destroy_display(CocoaDisplay *display) { CFRelease(display->event_queue); + [display->arp release]; free(display); } @@ -56,8 +65,10 @@ bool get_event(CocoaDisplay *display, CocoaEvent *buf) NSEvent *event = [display->app nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES]; if(event) { + [event retain]; [display->app sendEvent:event]; convert_event(event, buf); + [event release]; return true; }