- gdk_threads_leave();
- return -1;
- }
-
- if (!wxTheApp)
- {
- wxCHECK_MSG( wxApp::GetInitializerFunction(), -1,
- wxT("wxWindows error: No initializer - use IMPLEMENT_APP macro.\n") );
-
- wxAppInitializerFunction app_ini = wxApp::GetInitializerFunction();
-
- wxObject *test_app = app_ini();
-
- wxTheApp = (wxApp*) test_app;
- }
-
- wxCHECK_MSG( wxTheApp, -1, wxT("wxWindows error: no application object") );
-
- wxTheApp->argc = argc;
-#if wxUSE_UNICODE
- wxTheApp->argv = new wxChar*[argc+1];
- int mb_argc = 0;
- while (mb_argc < argc)
- {
- wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc]));
- mb_argc++;
- }
- wxTheApp->argv[mb_argc] = (wxChar *)NULL;
-#else
- wxTheApp->argv = argv;
-#endif
-
- wxString name(wxFileNameFromPath(argv[0]));
- wxStripExtension( name );
- wxTheApp->SetAppName( name );
-
- int retValue = 0;
-
- if ( !wxTheApp->OnInitGui() )
- retValue = -1;
-
- // Here frames insert themselves automatically into wxTopLevelWindows by
- // getting created in OnInit().
- if ( retValue == 0 )
- {
- if ( !wxTheApp->OnInit() )
- retValue = -1;
- }
-
- if ( retValue == 0 )
- {
- /* delete pending toplevel windows (typically a single
- dialog) so that, if there isn't any left, we don't
- call OnRun() */
- wxTheApp->DeletePendingObjects();
-
- wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
-
- if (wxTheApp->Initialized())
- {
- retValue = wxTheApp->OnRun();
-
- wxWindow *topWindow = wxTheApp->GetTopWindow();
- if (topWindow)
- {
- /* Forcibly delete the window. */
- if (topWindow->IsKindOf(CLASSINFO(wxFrame)) ||
- topWindow->IsKindOf(CLASSINFO(wxDialog)) )
- {
- topWindow->Close( TRUE );
- wxTheApp->DeletePendingObjects();
- }
- else
- {
- delete topWindow;
- wxTheApp->SetTopWindow( (wxWindow*) NULL );
- }
- }
- wxTheApp->OnExit();
- }