]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/cocoa/cocoadisplay.m
Compatibility changes for building on OS X 10.5
[libs/gui.git] / source / graphics / cocoa / cocoadisplay.m
index 3445c176cad0911337030543c1e52ae30f441c36..c6485a76ef5bbbbbe4ce28ab6141b0ce7dd60209 100644 (file)
@@ -1,4 +1,8 @@
+#include <stdlib.h>
+#include <string.h>
 #import <AppKit/NSApplication.h>
+#import <AppKit/NSEvent.h>
+#import <Foundation/NSAutoReleasePool.h>
 #import <Foundation/NSRunLoop.h>
 #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;
        }