sdl

FORK: Simple Directmedia Layer
git clone https://git.neptards.moe/neptards/sdl.git
Log | Files | Refs

mac_support_cocoa.m (2060B)


      1 /*******************************
      2  Mac support for HID Test GUI
      3  
      4  Alan Ott
      5  Signal 11 Software
      6 *******************************/
      7 
      8 #include <fx.h>
      9 #import <Cocoa/Cocoa.h>
     10 
     11 extern FXMainWindow *g_main_window;
     12 
     13 
     14 @interface MyAppDelegate : NSObject
     15 {
     16 } 
     17 @end
     18 
     19 @implementation MyAppDelegate
     20 - (void) applicationWillBecomeActive:(NSNotification*)notif
     21 {
     22 	printf("WillBecomeActive\n");
     23 	g_main_window->show();
     24 
     25 }
     26 
     27 - (void) applicationWillTerminate:(NSNotification*)notif
     28 {
     29 	/* Doesn't get called. Not sure why */
     30 	printf("WillTerminate\n");
     31 	FXApp::instance()->exit();
     32 }
     33 
     34 - (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication*)sender
     35 {
     36 	/* Doesn't get called. Not sure why */
     37 	printf("ShouldTerminate\n");
     38 	return YES;
     39 }
     40 
     41 - (void) applicationWillHide:(NSNotification*)notif
     42 {
     43 	printf("WillHide\n");
     44 	g_main_window->hide();
     45 }
     46 
     47 - (void) handleQuitEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
     48 {
     49 	printf("QuitEvent\n");
     50 	FXApp::instance()->exit();
     51 }
     52 
     53 @end
     54 
     55 extern "C" {
     56 
     57 void
     58 init_apple_message_system()
     59 {
     60 	static MyAppDelegate *d = [MyAppDelegate new];
     61 
     62 	[[NSApplication sharedApplication] setDelegate:d];
     63 
     64 	/* Register for Apple Events. */
     65 	/* This is from
     66 	   http://stackoverflow.com/questions/1768497/application-exit-event */
     67 	NSAppleEventManager *aem = [NSAppleEventManager sharedAppleEventManager];
     68 	[aem setEventHandler:d
     69 	     andSelector:@selector(handleQuitEvent:withReplyEvent:)
     70 	     forEventClass:kCoreEventClass andEventID:kAEQuitApplication];
     71 }
     72 
     73 void
     74 check_apple_events()
     75 {
     76 	NSApplication *app = [NSApplication sharedApplication];
     77 
     78 	NSAutoreleasePool *pool = [NSAutoreleasePool new];
     79 	while (1) {
     80 		NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
     81 		                        untilDate:nil
     82                                         inMode:NSDefaultRunLoopMode
     83                                         dequeue:YES];
     84 		if (event == NULL)
     85 			break;
     86 		else {
     87 			//printf("Event happened: Type: %d\n", event->_type);
     88 			[app sendEvent: event];
     89 		}
     90 	}
     91 	[pool release];
     92 }
     93 
     94 } /* extern "C" */