X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1bf77ee556a5418059139305e9edb05bde9b8a1d..83842a0ba326b22c6b930998a7f817e83ff7f7be:/src/mac/app.cpp diff --git a/src/mac/app.cpp b/src/mac/app.cpp index 3a18d6363f..0c8413941f 100644 --- a/src/mac/app.cpp +++ b/src/mac/app.cpp @@ -69,6 +69,7 @@ extern wxList wxPendingDelete; extern wxList *wxWinMacWindowList; extern wxList *wxWinMacControlList; +extern size_t g_numberOfThreads; // statics for implementation @@ -110,6 +111,8 @@ long wxApp::s_macPreferencesMenuItemId = wxID_PREFERENCES ; long wxApp::s_macExitMenuItemId = wxID_EXIT ; wxString wxApp::s_macHelpMenuTitleName = wxT("&Help") ; +// Normally we're not a plugin +bool wxApp::sm_isEmbedded = false; //---------------------------------------------------------------------- // Core Apple Event Support //---------------------------------------------------------------------- @@ -219,13 +222,12 @@ short wxApp::MacHandleAEOApp(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNU short wxApp::MacHandleAEQuit(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply)) { - /* wxWindow* win = GetTopWindow() ; + wxWindow* win = GetTopWindow() ; if ( win ) { win->Close(TRUE ) ; } - else - */ + else { ExitMainLoop() ; } @@ -522,7 +524,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) // Mac-specific - UMAInitToolbox( 4 ) ; + UMAInitToolbox( 4, sm_isEmbedded ) ; SetEventMask( everyEvent ) ; UMAShowWatchCursor() ; @@ -610,10 +612,11 @@ bool wxApp::Initialize(int& argc, wxChar **argv) if ( argc > 1 ) { static const wxChar *ARG_PSN = _T("-psn_"); - if ( wxStrncmp(argv[1], ARG_PSN, sizeof(ARG_PSN) - 1) == 0 ) + if ( wxStrncmp(argv[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 ) { // remove this argument - memmove(argv, argv + 1, argc--); + --argc; + memmove(argv + 1, argv + 2, argc * sizeof(char *)); } } @@ -638,38 +641,44 @@ bool wxApp::OnInitGui() #if TARGET_CARBON InstallStandardEventHandler( GetApplicationEventTarget() ) ; - InstallApplicationEventHandler( - GetwxAppEventHandlerUPP(), - GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler)); + if (!sm_isEmbedded) + { + InstallApplicationEventHandler( + GetwxAppEventHandlerUPP(), + GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler)); + } #endif + if (!sm_isEmbedded) + { #if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340) - AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , - NewAEEventHandlerUPP(AEHandleODoc) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , - NewAEEventHandlerUPP(AEHandleOApp) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , - NewAEEventHandlerUPP(AEHandlePDoc) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , - NewAEEventHandlerUPP(AEHandleQuit) , - 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , + NewAEEventHandlerUPP(AEHandleODoc) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , + NewAEEventHandlerUPP(AEHandleOApp) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , + NewAEEventHandlerUPP(AEHandlePDoc) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , + NewAEEventHandlerUPP(AEHandleQuit) , + 0 , FALSE ) ; #else - AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , - NewAEEventHandlerProc(AEHandleODoc) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , - NewAEEventHandlerProc(AEHandleOApp) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , - NewAEEventHandlerProc(AEHandlePDoc) , - 0 , FALSE ) ; - AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , - NewAEEventHandlerProc(AEHandleQuit) , - 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , + NewAEEventHandlerProc(AEHandleODoc) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , + NewAEEventHandlerProc(AEHandleOApp) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , + NewAEEventHandlerProc(AEHandlePDoc) , + 0 , FALSE ) ; + AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , + NewAEEventHandlerProc(AEHandleQuit) , + 0 , FALSE ) ; #endif + } return TRUE ; } @@ -802,7 +811,11 @@ void wxStAppResource::OpenSharedLibraryResource(const void *initBlock) // allocate copy to replace .dylib.* extension with .rsrc if (theLibPath != NULL) { - theResPath = theLibPath; +#if wxUSE_UNICODE + theResPath = wxString(theLibPath, wxConvLocal); +#else + theResPath = wxString(theLibPath); +#endif // replace '_core' with '' in case of multi-lib build theResPath.Replace(wxT("_core"), wxEmptyString); // replace ".dylib" shared library extension with ".rsrc" @@ -828,9 +841,8 @@ void wxStAppResource::OpenSharedLibraryResource(const void *initBlock) } if (theErr != noErr) { #ifdef __WXDEBUG__ - fprintf(stderr, - wxT("unable to open wxMac resource file '%s'\n"), - theResPath.mb_str() ); + wxLogDebug( wxT("unable to open wxMac resource file '%s'\n"), + theResPath.mb_str() ); #endif // __WXDEBUG__ } @@ -1011,14 +1023,6 @@ wxApp::wxApp() #endif } -bool wxApp::Initialized() -{ - if (GetTopWindow()) - return TRUE; - else - return FALSE; -} - int wxApp::MainLoop() { m_keepGoing = TRUE; @@ -1250,7 +1254,16 @@ void wxApp::MacDoOneEvent() if ( wxTheApp->ProcessIdle() ) sleepTime = kEventDurationNoWait ; else - sleepTime = kEventDurationForever ; + { + if (g_numberOfThreads) + { + sleepTime = kEventDurationNoWait; + } + else + { + sleepTime = kEventDurationSecond; + } + } } else if ( status == eventLoopQuitErr ) { @@ -1282,9 +1295,18 @@ void wxApp::MacDoOneEvent() ::IdleControls( window ) ; if ( wxTheApp->ProcessIdle() ) - sleepTime = 0 ; + sleepTime = kEventDurationNoWait; else - sleepTime = GetCaretTime() / 2 ; + { + if (g_numberOfThreads) + { + sleepTime = kEventDurationNoWait; + } + else + { + sleepTime = kEventDurationSecond; + } + } } if ( event.what != kHighLevelEvent ) SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ; @@ -1295,13 +1317,22 @@ void wxApp::MacDoOneEvent() wxMacProcessNotifierAndPendingEvents() ; } +/*virtual*/ void wxApp::MacHandleUnhandledEvent( WXEVENTREF evr ) +{ + // Override to process unhandled events as you please +} + void wxApp::MacHandleOneEvent( WXEVENTREF evr ) { #if TARGET_CARBON EventTargetRef theTarget; theTarget = GetEventDispatcherTarget(); m_macCurrentEvent = evr ; - SendEventToEventTarget ((EventRef) evr , theTarget); + OSStatus status = SendEventToEventTarget ((EventRef) evr , theTarget); + if(status == eventNotHandledErr) + { + MacHandleUnhandledEvent(evr); + } #else EventRecord* ev = (EventRecord*) evr ; m_macCurrentEvent = ev ; @@ -1333,6 +1364,10 @@ void wxApp::MacHandleOneEvent( WXEVENTREF evr ) MacHandleActivateEvent( ev ) ; break; case updateEvt: + // In embedded mode we first let the UnhandledEvent function + // try to handle the update event. If we handle it ourselves + // first and then pass it on, the host's windows won't update. + MacHandleUnhandledEvent(ev); MacHandleUpdateEvent( ev ) ; break; case keyDown: