| 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);
- }
- }
- }
|