mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
Externals: add hidapi
Current master (d17db57b9d4354752e0af42f5f33007a42ef2906) because Android support was added after the current release (0.8.0-rc1).
This commit is contained in:
134
Externals/hidapi/testgui/mac_support.cpp
vendored
Normal file
134
Externals/hidapi/testgui/mac_support.cpp
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
/*******************************
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user