X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6239ee05567eac71754f56c2a154222d10b57ff1..409521e45d44fc57df39efcb965701d378edcb20:/src/mac/carbon/app.cpp?ds=sidebyside diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index 4204a53721..f17bc48c4a 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -44,28 +44,13 @@ // mac -#ifndef __DARWIN__ - #if __option(profile) - #include - #endif -#endif - -// #include "apprsrc.h" - #include "wx/mac/uma.h" -#include "wx/mac/macnotfy.h" #ifdef __DARWIN__ # include # if defined(WXMAKINGDLL_CORE) # include # endif -#else -# include -# include -# include -# include -# include #endif // Keep linker from discarding wxStockGDIMac @@ -609,6 +594,7 @@ wxMacAppMenuEventHandler( EventHandlerCallRef WXUNUSED(handler), return eventNotHandledErr; } +#ifndef __LP64__ static pascal OSStatus wxMacAppCommandEventHandler( EventHandlerCallRef WXUNUSED(handler) , EventRef event , @@ -645,6 +631,7 @@ wxMacAppCommandEventHandler( EventHandlerCallRef WXUNUSED(handler) , } return result ; } +#endif static pascal OSStatus wxMacAppApplicationEventHandler( EventHandlerCallRef WXUNUSED(handler) , @@ -682,14 +669,15 @@ pascal OSStatus wxMacAppEventHandler( EventHandlerCallRef handler , EventRef eve OSStatus result = eventNotHandledErr ; switch ( GetEventClass( event ) ) { +#ifndef __LP64__ case kEventClassCommand : result = wxMacAppCommandEventHandler( handler , event , data ) ; break ; - +#endif case kEventClassApplication : result = wxMacAppApplicationEventHandler( handler , event , data ) ; break ; - +#ifndef __LP64__ case kEventClassMenu : result = wxMacAppMenuEventHandler( handler , event , data ) ; break ; @@ -707,13 +695,23 @@ pascal OSStatus wxMacAppEventHandler( EventHandlerCallRef handler , EventRef eve result = wxMacTopLevelMouseEventHandler( handler , event , NULL ) ; } break ; - +#endif case kEventClassAppleEvent : { - EventRecord rec ; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + if ( AEProcessEvent != NULL ) + { + result = AEProcessEvent(event); + } +#endif +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + { + EventRecord rec ; - wxMacConvertEventToRecord( event , &rec ) ; - result = AEProcessAppleEvent( &rec ) ; + wxMacConvertEventToRecord( event , &rec ) ; + result = AEProcessAppleEvent( &rec ) ; + } +#endif } break ; @@ -776,12 +774,12 @@ wxMacAssertOutputHandler(OSType WXUNUSED(componentSignature), #endif //__WXDEBUG__ -#ifdef __WXMAC_OSX__ extern "C" void macPostedEventCallback(void *WXUNUSED(unused)) { wxTheApp->ProcessPendingEvents(); } -#endif + +ProcessSerialNumber gAppProcess ; bool wxApp::Initialize(int& argc, wxChar **argv) { @@ -792,24 +790,9 @@ bool wxApp::Initialize(int& argc, wxChar **argv) #endif UMAInitToolbox( 4, sm_isEmbedded ) ; - SetEventMask( everyEvent ) ; +// TODO CHECK Can Be Removed SetEventMask( everyEvent ) ; UMAShowWatchCursor() ; -#ifndef __DARWIN__ -# if __option(profile) - ProfilerInit( collectDetailed, bestTimeBase , 40000 , 50 ) ; -# endif -#endif - -#ifndef __DARWIN__ - // now avoid exceptions thrown for new (bad_alloc) - // FIXME CS for some changes outside wxMac does not compile anymore -#if 0 - std::__throws_bad_alloc = 0 ; -#endif - -#endif - // Mac OS X passes a process serial number command line argument when // the application is launched from the Finder. This argument must be // removed from the command line arguments before being handled by the @@ -828,11 +811,12 @@ bool wxApp::Initialize(int& argc, wxChar **argv) if ( !wxAppBase::Initialize(argc, argv) ) return false; + GetCurrentProcess(&gAppProcess); + #if wxUSE_INTL wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding()); #endif -#if TARGET_API_MAC_OSX // these might be the startup dirs, set them to the 'usual' dir containing the app bundle wxString startupCwd = wxGetCwd() ; if ( startupCwd == wxT("/") || startupCwd.Right(15) == wxT("/Contents/MacOS") ) @@ -845,11 +829,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) wxString cwd = wxMacCFStringHolder(path).AsString(wxLocale::GetSystemEncoding()); wxSetWorkingDirectory( cwd ) ; } -#endif - wxMacCreateNotifierTable() ; - -#ifdef __WXMAC_OSX__ /* connect posted events to common-mode run loop so that wxPostEvent events are handled even while we're in the menu or on a scrollbar */ CFRunLoopSourceContext event_posted_context = {0}; @@ -858,7 +838,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv) CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes); // run loop takes ownership CFRelease(m_macEventPosted); -#endif UMAShowArrowCursor() ; @@ -876,15 +855,15 @@ bool wxApp::OnInitGui() { if ( !wxAppBase::OnInitGui() ) return false ; - +#ifndef __LP64__ InstallStandardEventHandler( GetApplicationEventTarget() ) ; - if (!sm_isEmbedded) { InstallApplicationEventHandler( GetwxMacAppEventHandlerUPP(), GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler)); } +#endif if (!sm_isEmbedded) { @@ -921,26 +900,15 @@ void wxApp::CleanUp() wxToolTip::RemoveToolTips() ; #endif -#ifdef __WXMAC_OSX__ if (m_macEventPosted) { CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes); m_macEventPosted = NULL; } -#endif // One last chance for pending objects to be cleaned up wxTheApp->DeletePendingObjects(); - wxMacDestroyNotifierTable() ; - -#ifndef __DARWIN__ -# if __option(profile) - ProfilerDump( (StringPtr)"\papp.prof" ) ; - ProfilerTerm() ; -# endif -#endif - UMACleanupToolbox() ; if (!sm_isEmbedded) @@ -976,31 +944,7 @@ void wxApp::CleanUp() // misc initialization stuff //---------------------------------------------------------------------- -#if defined(WXMAKINGDLL_CORE) && !defined(__DARWIN__) - -// for shared libraries we have to manually get the correct resource -// ref num upon initializing and releasing when terminating, therefore -// the __wxinitialize and __wxterminate must be used - -extern "C" -{ - void __sinit(void); // (generated by linker) - pascal OSErr __initialize(const CFragInitBlock *theInitBlock); - pascal void __terminate(void); -} - -pascal OSErr __wxinitialize(const CFragInitBlock *theInitBlock) -{ - return __initialize( theInitBlock ) ; -} - -pascal void __wxterminate(void) -{ - __terminate() ; -} - -#endif /* WXMAKINGDLL_CORE && !__DARWIN__ */ - +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec) { OSStatus err = noErr ; @@ -1041,9 +985,7 @@ bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec) UInt32 keyCode ; unsigned char charCode ; UInt32 modifiers ; -#ifndef __LP64__ GetMouse( &rec->where) ; -#endif err = GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, 4, NULL, &modifiers); err = GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, 4, NULL, &keyCode); err = GetEventParameter(event, kEventParamKeyMacCharCodes, typeChar, NULL, 1, NULL, &charCode); @@ -1068,10 +1010,7 @@ bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec) { UInt32 keyCode, modifiers; unsigned char charCode ; -#ifndef __LP64__ - GetMouse( &rec->where) ; -#endif rec->what = keyDown ; err = GetEventParameter(rawEvent, kEventParamKeyModifiers, typeUInt32, NULL, 4, NULL, &modifiers); err = GetEventParameter(rawEvent, kEventParamKeyCode, typeUInt32, NULL, 4, NULL, &keyCode); @@ -1095,6 +1034,7 @@ bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec) return converted ; } +#endif wxApp::wxApp() { @@ -1102,10 +1042,7 @@ wxApp::wxApp() m_macCurrentEvent = NULL ; m_macCurrentEventHandlerCallRef = NULL ; - -#ifdef __WXMAC_OSX__ m_macEventPosted = NULL ; -#endif } void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event)) @@ -1113,7 +1050,6 @@ void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event)) // If they are pending events, we must process them: pending events are // either events to the threads other than main or events posted with // wxPostEvent() functions - wxMacProcessNotifierAndPendingEvents(); #ifndef __WXUNIVERSAL__ if (!wxMenuBar::MacGetInstalledMenuBar() && wxMenuBar::MacGetCommonMenuBar()) wxMenuBar::MacGetCommonMenuBar()->MacInstallMenuBar(); @@ -1122,12 +1058,10 @@ void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event)) void wxApp::WakeUpIdle() { -#ifdef __WXMAC_OSX__ if (m_macEventPosted) { CFRunLoopSourceSignal(m_macEventPosted); } -#endif wxMacWakeUp() ; } @@ -1209,7 +1143,6 @@ bool wxApp::Yield(bool onlyIfNeeded) } } - wxMacProcessNotifierAndPendingEvents() ; s_inYield = false; return true; @@ -1247,7 +1180,6 @@ void wxApp::MacDoOneEvent() // repeaters DeletePendingObjects() ; - wxMacProcessNotifierAndPendingEvents() ; } // virtual @@ -1274,8 +1206,6 @@ void wxApp::MacHandleOneEvent( WXEVENTREF evr ) if (status == eventNotHandledErr) MacHandleUnhandledEvent(evr); - wxMacProcessNotifierAndPendingEvents() ; - #if wxUSE_THREADS wxMutexGuiLeaveOrEnter(); #endif // wxUSE_THREADS @@ -1454,24 +1384,6 @@ int wxMacKeyCodeToModifier(wxKeyCode key) } } -#ifndef __DARWIN__ -bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below -{ - wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key != - WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons")); - -//if OS X > 10.2 (i.e. 10.2.x) -//a known apple bug prevents the system from determining led -//states with GetKeys... can only determine caps lock led - return !!(GetCurrentKeyModifiers() & wxMacKeyCodeToModifier(key)); -//else -// KeyMapByteArray keymap; -// GetKeys((BigEndianLong*)keymap); -// return !!(BitTst(keymap, (sizeof(KeyMapByteArray)*8) - iKey)); -} -#endif - - wxMouseState wxGetMouseState() { wxMouseState ms; @@ -1480,16 +1392,10 @@ wxMouseState wxGetMouseState() ms.SetX(pt.x); ms.SetY(pt.y); -#if TARGET_API_MAC_OSX UInt32 buttons = GetCurrentButtonState(); ms.SetLeftDown( (buttons & 0x01) != 0 ); ms.SetMiddleDown( (buttons & 0x04) != 0 ); ms.SetRightDown( (buttons & 0x02) != 0 ); -#else - ms.SetLeftDown( Button() ); - ms.SetMiddleDown( 0 ); - ms.SetRightDown( 0 ); -#endif UInt32 modifiers = GetCurrentKeyModifiers(); ms.SetControlDown(modifiers & controlKey); @@ -1618,6 +1524,7 @@ bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers { // if window is not having a focus still testing for default enter or cancel // TODO: add the UMA version for ActiveNonFloatingWindow +#ifndef __LP64__ wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ; if ( focus ) { @@ -1645,6 +1552,7 @@ bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers handled = focus->GetEventHandler()->ProcessEvent( new_event ); } } +#endif } return handled ; }