#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 <shlwapi.h>
#endif
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(frame)"));
-
- return FALSE;
}
// "no redraw" frame
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(no redraw frame)"));
-
- return FALSE;
}
// Register the MDI frame window class.
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(MDI parent)"));
-
- return FALSE;
}
// "no redraw" MDI frame
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(no redraw MDI parent frame)"));
-
- return FALSE;
}
// Register the MDI child frame window class.
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(MDI child)"));
-
- return FALSE;
}
// "no redraw" MDI child frame
if ( !RegisterClass(&wndclass) )
{
wxLogLastError(wxT("RegisterClass(no redraw MDI child)"));
-
- return FALSE;
}
return TRUE;
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++ )
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
{
}
}
- wxTheApp->OnExit();
+ retValue = wxTheApp->OnExit();
wxEntryCleanup();
{
s_hadGuiLock = TRUE;
- size_t count = s_aSavedMessages.Count();
+ size_t count = s_aSavedMessages.GetCount();
for ( size_t n = 0; n < count; n++ )
{
MSG& msg = s_aSavedMessages[n];
- if ( !ProcessMessage((WXMSG *)&msg) )
- {
- ::TranslateMessage(&msg);
- ::DispatchMessage(&msg);
- }
+ DoMessage((WXMSG *)&msg);
}
s_aSavedMessages.Empty();
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()
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
event.RequestMore(TRUE);
}
- s_inOnIdle = FALSE;
+ wxIsInOnIdleFlag = FALSE;
}
// Send idle event to all top-level windows