X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/505f0a85c9b59d8be30f2be1f7cf4fd3d663f721..55826fcf4fd863d48ac28789d99bbb5c8a8d4c7e:/src/motif/app.cpp diff --git a/src/motif/app.cpp b/src/motif/app.cpp index d7a0f97dbb..0185173142 100644 --- a/src/motif/app.cpp +++ b/src/motif/app.cpp @@ -86,77 +86,22 @@ END_EVENT_TABLE() } #endif // __WXDEBUG__ -bool wxApp::Initialize() +bool wxApp::Initialize(int& argc, wxChar **argv) { - wxClassInfo::InitializeClasses(); - - // GL: I'm annoyed ... I don't know where to put this and I don't want to - // create a module for that as it's part of the core. -#if wxUSE_THREADS - wxPendingEventsLocker = new wxCriticalSection(); -#endif - - wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING); - wxTheColourDatabase->Initialize(); - - wxInitializeStockLists(); - wxInitializeStockObjects(); + if ( !wxAppBase::Initialize(argc, argv) ) + return false; wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER); - wxModule::RegisterModules(); - if (!wxModule::InitializeModules()) return FALSE; - - return TRUE; + return true; } void wxApp::CleanUp() { - wxModule::CleanUpModules(); - - wxDeleteStockObjects() ; - - // Destroy all GDI lists, etc. - - wxDeleteStockLists(); - - delete wxTheColourDatabase; - wxTheColourDatabase = NULL; - - wxClassInfo::CleanUpClasses(); - - delete wxTheApp; - wxTheApp = NULL; - delete wxWidgetHashTable; wxWidgetHashTable = NULL; - // GL: I'm annoyed ... I don't know where to put this and I don't want to - // create a module for that as it's part of the core. -#if wxUSE_THREADS - delete wxPendingEvents; - wxPendingEvents = NULL; - delete wxPendingEventsLocker; - wxPendingEventsLocker = NULL; -#endif - -#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - // At this point we want to check if there are any memory - // blocks that aren't part of the wxDebugContext itself, - // as a special case. Then when dumping we need to ignore - // wxDebugContext, too. - if (wxDebugContext::CountObjectsLeft(TRUE) > 0) - { - wxLogDebug("There were memory leaks.\n"); - wxDebugContext::Dump(); - wxDebugContext::PrintStatistics(); - } -#endif - - // do it as the very last thing because everything else can log messages - wxLog::DontCreateOnDemand(); - // do it as the very last thing because everything else can log messages - delete wxLog::SetActiveTarget(NULL); + wxAppBase::CleanUp(); } void wxApp::Exit() @@ -167,109 +112,9 @@ void wxApp::Exit() } // ============================================================================ -// wxEntry* +// wxApp // ============================================================================ -int wxEntryStart( int argc, char* argv[] ) -{ -#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - // This seems to be necessary since there are 'rogue' - // objects present at this point (perhaps global objects?) - // Setting a checkpoint will ignore them as far as the - // memory checking facility is concerned. - // Of course you may argue that memory allocated in globals should be - // checked, but this is a reasonable compromise. - wxDebugContext::SetCheckpoint(); -#endif - - if (!wxApp::Initialize()) - return -1; - - return 0; -} - -int wxEntryInitGui() -{ - int retValue = 0; - - // GUI-specific initialization, such as creating an app context. - if (!wxTheApp->OnInitGui()) - retValue = -1; - - return retValue; -} - -void wxEntryCleanup() -{ - // So dialog boxes aren't used for further messages - delete wxLog::SetActiveTarget(new wxLogStderr); - - // flush the logged messages if any - wxLog *pLog = wxLog::GetActiveTarget(); - if ( pLog != NULL && pLog->HasPendingMessages() ) - pLog->Flush(); - - wxApp::CleanUp(); -} - -int wxEntry( int argc, char *argv[] ) -{ - int retValue = 0; - - retValue = wxEntryStart( argc, argv ); - if (retValue) return retValue; - - if (!wxTheApp) - { - if (!wxApp::GetInitializerFunction()) - { - printf( "wxWindows error: No initializer - use IMPLEMENT_APP macro.\n" ); - return 0; - }; - - wxTheApp = (wxApp*) (* wxApp::GetInitializerFunction()) (); - }; - - if (!wxTheApp) - { - printf( "wxWindows error: wxTheApp == NULL\n" ); - return 0; - }; - - wxTheApp->SetClassName(wxFileNameFromPath(argv[0])); - wxTheApp->SetAppName(wxFileNameFromPath(argv[0])); - - wxTheApp->argc = argc; - wxTheApp->argv = argv; - - // GUI-specific initialization, such as creating an app context. - retValue = wxEntryInitGui(); - if (retValue) return retValue; - - // Here frames insert themselves automatically into wxTopLevelWindows by - // getting created in OnInit(). - - if (wxTheApp->OnInit()) - { - if (wxTheApp->Initialized()) - wxTheApp->OnRun(); - } - - if (wxTheApp->GetTopWindow()) - { - delete wxTheApp->GetTopWindow(); - wxTheApp->SetTopWindow(NULL); - } - - wxTheApp->DeletePendingObjects(); - - retValue = wxTheApp->OnExit(); - - wxEntryCleanup(); - - return retValue; -} - wxApp::wxApp() { argc = 0; @@ -447,24 +292,6 @@ bool wxApp::SendIdleEvents(wxWindow* win) return needMore ; } -void wxApp::DeletePendingObjects() -{ - wxList::Node *node = wxPendingDelete.GetFirst(); - while (node) - { - wxObject *obj = node->GetData(); - - delete obj; - - if (wxPendingDelete.Member(obj)) - delete node; - - // Deleting one object may have deleted other pending - // objects, so start from beginning of list again. - node = wxPendingDelete.GetFirst(); - } -} - static char *fallbackResources[] = { "*menuBar.marginHeight: 0", "*menuBar.shadowThickness: 1",