#import "cocoaApp.h"

@implementation NSApplication(i)
- (void)appRunning
{
    _running = 1;
}
@end

@interface cocoaAppDelegate : NSObject
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
@end

@implementation cocoaAppDelegate : NSObject
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    return NSTerminateCancel;
}
@end

void cocoaCreateApp()
{
        ProcessSerialNumber psn;
        NSAutoreleasePool *pool;

        if (!GetCurrentProcess(&psn)) {
                TransformProcessType(&psn, kProcessTransformToForegroundApplication);
                SetFrontProcess(&psn);
        }

        pool = [[NSAutoreleasePool alloc] init];

        if (NSApp == nil) {
                [NSApplication sharedApplication];
                //TODO : Create menu
                [NSApp finishLaunching];
        }

        if ([NSApp delegate] == nil) {
                [NSApp setDelegate:[[cocoaAppDelegate alloc] init]];
        }

        [NSApp appRunning];

        [pool release];

}

void cocoaKeyCode(NSEvent *event)
{

	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

	NSConnection *connec = [NSConnection defaultConnection];

        [connec setRootObject: event];
        if ([connec registerName: @"DolphinCocoaEvent"] == NO)
        {
                //printf("error creating nsconnection\n");
        }

	[pool release];


}

void cocoaSendEvent(NSEvent *event)
{

	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
	
	if ( event != nil ) {
		switch ([event type]) {
			case NSKeyDown:
			case NSKeyUp:
				cocoaKeyCode(event);
				break;
			default:
				[NSApp sendEvent:event];
				break;
			}
	}


	[pool release];

}