X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2cbc7f485fdced12d4023aeb3e6412676d049321..05159a2750ed2cc5945a85bc5fc6849ad1a30e75:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 796ee13256..dbdba5bbe8 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -117,7 +117,9 @@ #define _WIN32_IE 0x0200 #endif -#if _WIN32_IE >= 0x0300 && !defined(__MINGW32__) +#if _WIN32_IE >= 0x0300 && \ + (!defined(__MINGW32__) || wxCHECK_W32API_VERSION( 2, 0 )) && \ + !defined(__CYGWIN__) #include #endif @@ -473,7 +475,9 @@ void wxApp::ConvertToStandardCommandArgs(const char* lpCmdLine) wxString name; wxFileName::SplitPath(argv[0], NULL, &name, NULL); - SetAppName(name); + // but don't override the name already set by the user code, if any + if ( GetAppName().empty() ) + SetAppName(name); // copy all the other arguments to wxApp::argv[] for ( int i = 1; i < argc; i++ ) @@ -700,29 +704,15 @@ int wxEntry(WXHINSTANCE hInstance, wxLog::SetTimestamp(NULL); #endif - int retValue = 0; - - // it is common to create a modal dialog in OnInit() (to ask/notify the - // user about something) but it wouldn't work if we don't change the - // "exit on delete last frame" flag here as when this dialog is - // deleted, the app would terminate (it was the last top level window - // as the main frame wasn't created yet!), so disable this behaviour - // temproarily - bool exitOnLastFrameDelete = wxTheApp->GetExitOnFrameDelete(); - wxTheApp->SetExitOnFrameDelete(FALSE); - // init the app - retValue = wxEntryInitGui() && wxTheApp->OnInit() ? 0 : -1; - - // restore the old flag value - wxTheApp->SetExitOnFrameDelete(exitOnLastFrameDelete); + int retValue = wxEntryInitGui() && wxTheApp->OnInit() ? 0 : -1; if ( retValue == 0 ) { if ( enterLoop ) { // run the main loop - retValue = wxTheApp->OnRun(); + wxTheApp->OnRun(); } else { @@ -749,7 +739,7 @@ int wxEntry(WXHINSTANCE hInstance, } } - wxTheApp->OnExit(); + retValue = wxTheApp->OnExit(); wxEntryCleanup(); @@ -985,8 +975,8 @@ bool wxApp::ProcessIdle() void wxApp::ExitMainLoop() { - // VZ: why not ::PostQuitMessage()? - m_keepGoing = FALSE; + // this will set m_keepGoing to FALSE a bit later + ::PostQuitMessage(0); } bool wxApp::Pending() @@ -1076,15 +1066,21 @@ bool wxApp::ProcessMessage(WXMSG *wxmsg) return FALSE; } +// this is a temporary hack and will be replaced by using wxEventLoop in the +// future +// +// it is needed to allow other event loops (currently only one: the modal +// dialog one) to reset the OnIdle() semaphore because otherwise OnIdle() +// wouldn't do anything while a modal dialog shown from OnIdle() call is shown. +bool wxIsInOnIdleFlag = FALSE; + void wxApp::OnIdle(wxIdleEvent& event) { - static bool s_inOnIdle = FALSE; - // Avoid recursion (via ProcessEvent default case) - if ( s_inOnIdle ) + if ( wxIsInOnIdleFlag ) return; - s_inOnIdle = TRUE; + wxIsInOnIdleFlag = TRUE; // If there are pending events, we must process them: pending events // are either events to the threads other than main or events posted @@ -1119,7 +1115,7 @@ void wxApp::OnIdle(wxIdleEvent& event) event.RequestMore(TRUE); } - s_inOnIdle = FALSE; + wxIsInOnIdleFlag = FALSE; } // Send idle event to all top-level windows