| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- /*******************************
 
-  Mac support for HID Test GUI
 
-  
 
-  Alan Ott
 
-  Signal 11 Software
 
-  Some of this code is from Apple Documentation, most notably
 
-  http://developer.apple.com/legacy/mac/library/documentation/AppleScript/Conceptual/AppleEvents/AppleEvents.pdf 
 
- *******************************/
 
- #include <Carbon/Carbon.h>
 
- #include <fx.h>
 
- extern FXMainWindow *g_main_window;
 
- static pascal OSErr HandleQuitMessage(const AppleEvent *theAppleEvent, AppleEvent 
 
- 									  *reply, long handlerRefcon) 
 
- {
 
- 	puts("Quitting\n");
 
- 	FXApp::instance()->exit();
 
- 	return 0;
 
- }
 
- static pascal OSErr HandleReopenMessage(const AppleEvent *theAppleEvent, AppleEvent 
 
- 									  *reply, long handlerRefcon) 
 
- {
 
- 	puts("Showing");
 
- 	g_main_window->show();
 
- 	return 0;
 
- }
 
- static pascal OSErr HandleWildCardMessage(const AppleEvent *theAppleEvent, AppleEvent 
 
- 									  *reply, long handlerRefcon) 
 
- {
 
- 	puts("WildCard\n");
 
- 	return 0;
 
- }
 
- OSStatus AEHandler(EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon) 
 
- { 
 
-     Boolean     release = false; 
 
-     EventRecord eventRecord; 
 
-     OSErr       ignoreErrForThisSample; 
 
- 	
 
-     // Events of type kEventAppleEvent must be removed from the queue 
 
-     //  before being passed to AEProcessAppleEvent. 
 
-     if (IsEventInQueue(GetMainEventQueue(), inEvent)) 
 
-     { 
 
-         // RemoveEventFromQueue will release the event, which will 
 
-         //  destroy it if we don't retain it first. 
 
-         RetainEvent(inEvent); 
 
-         release = true; 
 
-         RemoveEventFromQueue(GetMainEventQueue(), inEvent); 
 
-     } 
 
-     // Convert the event ref to the type AEProcessAppleEvent expects. 
 
-     ConvertEventRefToEventRecord(inEvent, &eventRecord); 
 
-     ignoreErrForThisSample = AEProcessAppleEvent(&eventRecord); 
 
-     if (release) 
 
-         ReleaseEvent(inEvent); 
 
-     // This Carbon event has been handled, even if no AppleEvent handlers 
 
-     //  were installed for the Apple event. 
 
-     return noErr; 
 
- }
 
- static void HandleEvent(EventRecord *event) 
 
- { 
 
- 	//printf("What: %d message %x\n", event->what, event->message);
 
- 	if (event->what == osEvt) {
 
- 		if (((event->message >> 24) & 0xff) == suspendResumeMessage) {
 
- 			if (event->message & resumeFlag) {
 
- 				g_main_window->show();				
 
- 			}
 
- 		}
 
- 	}
 
- #if 0
 
-     switch (event->what) 
 
-     { 
 
-         case mouseDown: 
 
-             //HandleMouseDown(event); 
 
-             break; 
 
-         case keyDown: 
 
-         case autoKey: 
 
-             //HandleKeyPress(event); 
 
-             break; 
 
-         case kHighLevelEvent: 
 
- 			puts("Calling ProcessAppleEvent\n");
 
-             AEProcessAppleEvent(event); 
 
-             break; 
 
-     } 
 
- #endif
 
- } 
 
- void
 
- init_apple_message_system()
 
- {
 
- 	OSErr err;
 
- 	static const EventTypeSpec appleEvents[] = 
 
- 	{
 
- 		{ kEventClassAppleEvent, kEventAppleEvent }
 
- 	};
 
- 	
 
- 	/* Install the handler for Apple Events */
 
- 	InstallApplicationEventHandler(NewEventHandlerUPP(AEHandler), 
 
- 	              GetEventTypeCount(appleEvents), appleEvents, 0, NULL); 
 
- 	/* Install handlers for the individual Apple Events that come
 
- 	   from the Dock icon: the Reopen (click), and the Quit messages. */
 
- 	err = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, 
 
- 	              NewAEEventHandlerUPP(HandleQuitMessage), 0, false);
 
- 	err = AEInstallEventHandler(kCoreEventClass, kAEReopenApplication, 
 
- 	              NewAEEventHandlerUPP(HandleReopenMessage), 0, false);
 
- #if 0
 
- 	// Left as an example of a wild card match.
 
- 	err = AEInstallEventHandler(kCoreEventClass, typeWildCard, 
 
- 	              NewAEEventHandlerUPP(HandleWildMessage), 0, false);
 
- #endif
 
- }
 
- void
 
- check_apple_events()
 
- {
 
- 	RgnHandle       cursorRgn = NULL; 
 
- 	Boolean         gotEvent=TRUE; 
 
- 	EventRecord     event; 
 
- 	while (gotEvent) { 
 
- 		gotEvent = WaitNextEvent(everyEvent, &event, 0L/*timeout*/, cursorRgn); 
 
- 		if (gotEvent) { 
 
- 			HandleEvent(&event); 
 
- 		} 
 
- 	}
 
- }
 
 
  |