#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;

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

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

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

        [NSApp appRunning];
}

bool cocoaKeyCode(NSEvent *event)
{
	static bool CMDDown = false, QDown = false;
	bool Return = false;

	NSConnection *connec = [[NSConnection new] autorelease];

	[connec setRootObject: event];
	if ([connec registerName: @"DolphinCocoaEvent"] == NO)
	{
			//printf("error creating nsconnection\n");
	}
	
	if( [event type] != NSFlagsChanged )
	{
		const char *Keys = [[event characters] UTF8String];

		if( Keys[0] == 'q' && [event type] == NSKeyDown )
			QDown = true;
		if( Keys[0] == 'q' && [event type] == NSKeyUp )
			QDown = false;
	}
	else 
		if( [event modifierFlags] & NSCommandKeyMask )
			CMDDown = true;
		else 
			CMDDown = false;
		
	if( QDown && CMDDown )
		Return = true;

	return Return;
}

bool cocoaSendEvent(NSEvent *event)
{
	if ( event != nil ) {
		switch ([event type]) {
			case NSKeyDown:
			case NSKeyUp:
			case NSFlagsChanged: // For Command
				return cocoaKeyCode(event);
				break;
			default:
				[NSApp sendEvent:event];
				break;
			}
	}

	return false;
}