diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp index 1eea40ebc4..d2479a543d 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.cpp @@ -15,32 +15,47 @@ #include #include -OSStatus MemoryCardDriverThreaded_MacOSX::VolumeChanged( EventHandlerCallRef ref, EventRef event, void *p ) +class MemoryCardDriverThreaded_MacOSX::Helper { - MemoryCardDriverThreaded_MacOSX *This = (MemoryCardDriverThreaded_MacOSX *)p; - LockMut( This->m_ChangedLock ); - - This->m_bChanged = true; - return eventNotHandledErr; // let others do something -} +public: + Helper( MemoryCardDriverThreaded_MacOSX *driver ) + { + m_HandlerUPP = NewEventHandlerUPP( VolumesChanged ); + EventTypeSpec types[] = { { kEventClassVolume, kEventVolumeMounted }, + { kEventClassVolume, kEventVolumeUnmounted } }; + UInt32 numTypes = sizeof(types)/sizeof(types[0]); + OSStatus ret = InstallApplicationEventHandler( m_HandlerUPP, numTypes, types, driver, &m_Handler ); + ASSERT( ret == noErr ); + } + + ~Helper() + { + RemoveEventHandler( m_Handler ); + DisposeEventHandlerUPP( m_HandlerUPP ); + } + +private: + static OSStatus VolumesChanged( EventHandlerCallRef ref, EventRef event, void *p ) + { + MemoryCardDriverThreaded_MacOSX *driver = (MemoryCardDriverThreaded_MacOSX *)p; + LockMut( driver->m_ChangedLock ); + driver->m_bChanged = true; + return eventNotHandledErr; // let others do something + } + + EventHandlerUPP m_HandlerUPP; + EventHandlerRef m_Handler; +}; MemoryCardDriverThreaded_MacOSX::MemoryCardDriverThreaded_MacOSX() : m_ChangedLock( "MC changed lock" ) { m_bChanged = true; - m_HandlerUPP = NewEventHandlerUPP( VolumeChanged ); - - EventTypeSpec types[] = { { kEventClassVolume, kEventVolumeMounted }, - { kEventClassVolume, kEventVolumeUnmounted } }; - UInt32 numTypes = sizeof(types)/sizeof(types[0]); - OSStatus ret = InstallApplicationEventHandler( m_HandlerUPP, numTypes, types, this, &m_Handler ); - - ASSERT( ret == noErr ); + m_pHelper = new Helper( this ); } MemoryCardDriverThreaded_MacOSX::~MemoryCardDriverThreaded_MacOSX() { - RemoveEventHandler( m_Handler ); - DisposeEventHandlerUPP( m_HandlerUPP ); + delete m_pHelper; } void MemoryCardDriverThreaded_MacOSX::Unmount( UsbStorageDevice *pDevice ) @@ -209,7 +224,7 @@ bool MemoryCardDriverThreaded_MacOSX::TestWrite( UsbStorageDevice *pDevice ) } /* - * (c) 2005-2006 Steve Checkoway + * (c) 2005-2006, 2008 Steve Checkoway * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.h b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.h index 261cab133c..96672f375c 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.h +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriverThreaded_MacOSX.h @@ -4,16 +4,6 @@ #include "MemoryCardDriver.h" #include "RageThreads.h" - -// I can't include because Style conflicts. -typedef struct OpaqueEventHandlerRef *EventHandlerRef; -typedef struct OpaqueEventHandlerCallRef *EventHandlerCallRef; -typedef struct OpaqueEventRef *EventRef; -typedef long int OSStatus; -typedef OSStatus (*EventHandlerProcPtr)( EventHandlerCallRef inHandlerCallRef, - EventRef inEvent, void * inUserData ); -typedef EventHandlerProcPtr EventHandlerUPP; - class MemoryCardDriverThreaded_MacOSX : public MemoryCardDriver { public: @@ -28,12 +18,13 @@ protected: bool TestWrite( UsbStorageDevice *pDevice ); private: - static OSStatus VolumeChanged( EventHandlerCallRef ref, EventRef event, void *p ); - + MemoryCardDriverThreaded_MacOSX( const MemoryCardDriverThreaded_MacOSX &m ); + MemoryCardDriverThreaded_MacOSX &operator=( const MemoryCardDriverThreaded_MacOSX &m ); bool m_bChanged; RageMutex m_ChangedLock; - EventHandlerUPP m_HandlerUPP; - EventHandlerRef m_Handler; + class Helper; + friend class Helper; + Helper *m_pHelper; }; #ifdef ARCH_MEMORY_CARD_DRIVER @@ -45,7 +36,7 @@ private: #endif /* - * (c) 2005-2006 Steve Checkoway + * (c) 2005-2006, 2008 Steve Checkoway * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a