X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb6fa4b4257897e4e9655b05e4105e8b47f67476..55826fcf4fd863d48ac28789d99bbb5c8a8d4c7e:/src/motif/app.cpp diff --git a/src/motif/app.cpp b/src/motif/app.cpp index cc1fad12dd..0185173142 100644 --- a/src/motif/app.cpp +++ b/src/motif/app.cpp @@ -66,8 +66,6 @@ static WXWidget wxCreateTopLevelWidget( WXDisplay* display ); extern wxList wxPendingDelete; extern bool wxAddIdleCallback(); -wxApp *wxTheApp = NULL; - wxHashTable *wxWidgetHashTable = NULL; IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler) @@ -88,185 +86,34 @@ 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); -} - -// ============================================================================ -// wxEntry* -// ============================================================================ - -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; + wxAppBase::CleanUp(); } -int wxEntryInitGui() +void wxApp::Exit() { - 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; + wxAppConsole::Exit(); } -// Static member initialization -wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL; +// ============================================================================ +// wxApp +// ============================================================================ wxApp::wxApp() { @@ -445,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", @@ -564,6 +393,8 @@ WXWidget wxCreateTopLevelWidget( WXDisplay* display ) applicationShellWidgetClass, (Display*)display, NULL, 0 ); + XtSetMappedWhenManaged( tlw, False ); + XtRealizeWidget( tlw ); XtAddCallback( tlw, XmNdestroyCallback, (XtCallbackProc)wxTLWidgetDestroyCallback, @@ -591,21 +422,6 @@ void wxApp::SetTopLevelWidget(WXDisplay* display, WXWidget widget) (*m_perDisplayData)[display].m_topLevelWidget = (Widget)widget; } -void wxExit() -{ - int retValue = 0; - if (wxTheApp) - retValue = wxTheApp->OnExit(); - - wxApp::CleanUp(); - /* - * Exit in some platform-specific way. - * Not recommended that the app calls this: - * only for emergencies. - */ - exit(retValue); -} - // Yield to other processes bool wxApp::Yield(bool onlyIfNeeded)