Edit

kc3-lang/SDL/src/hidapi/testgui/mac_support_cocoa.m

Branch :

  • Show log

    Commit

  • Author : Sam Lantinga
    Date : 2018-08-09 16:05:48
    Hash : 4f41f07d
    Message : Added missing files from previous commits

  • src/hidapi/testgui/mac_support_cocoa.m
  • /*******************************
     Mac support for HID Test GUI
     
     Alan Ott
     Signal 11 Software
    *******************************/
    
    #include <fx.h>
    #import <Cocoa/Cocoa.h>
    
    extern FXMainWindow *g_main_window;
    
    
    @interface MyAppDelegate : NSObject
    {
    } 
    @end
    
    @implementation MyAppDelegate
    - (void) applicationWillBecomeActive:(NSNotification*)notif
    {
    	printf("WillBecomeActive\n");
    	g_main_window->show();
    
    }
    
    - (void) applicationWillTerminate:(NSNotification*)notif
    {
    	/* Doesn't get called. Not sure why */
    	printf("WillTerminate\n");
    	FXApp::instance()->exit();
    }
    
    - (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication*)sender
    {
    	/* Doesn't get called. Not sure why */
    	printf("ShouldTerminate\n");
    	return YES;
    }
    
    - (void) applicationWillHide:(NSNotification*)notif
    {
    	printf("WillHide\n");
    	g_main_window->hide();
    }
    
    - (void) handleQuitEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
    {
    	printf("QuitEvent\n");
    	FXApp::instance()->exit();
    }
    
    @end
    
    extern "C" {
    
    void
    init_apple_message_system()
    {
    	static MyAppDelegate *d = [MyAppDelegate new];
    
    	[[NSApplication sharedApplication] setDelegate:d];
    
    	/* Register for Apple Events. */
    	/* This is from
    	   http://stackoverflow.com/questions/1768497/application-exit-event */
    	NSAppleEventManager *aem = [NSAppleEventManager sharedAppleEventManager];
    	[aem setEventHandler:d
    	     andSelector:@selector(handleQuitEvent:withReplyEvent:)
    	     forEventClass:kCoreEventClass andEventID:kAEQuitApplication];
    }
    
    void
    check_apple_events()
    {
    	NSApplication *app = [NSApplication sharedApplication];
    
    	NSAutoreleasePool *pool = [NSAutoreleasePool new];
    	while (1) {
    		NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
    		                        untilDate:nil
                                            inMode:NSDefaultRunLoopMode
                                            dequeue:YES];
    		if (event == NULL)
    			break;
    		else {
    			//printf("Event happened: Type: %d\n", event->_type);
    			[app sendEvent: event];
    		}
    	}
    	[pool release];
    }
    
    } /* extern "C" */