// we can't simply double-click on the error message and get to that
// line in the source. So VC++ at least, let's have a sensible default.
#ifdef __VISUALC__
+#if wxUSE_LOG
wxLog::SetTimestamp(NULL);
-#endif
+#endif // wxUSE_LOG
+#endif // __VISUALC__
// init the app
int retValue = wxEntryInitGui() && wxTheApp->OnInit() ? 0 : -1;
if ( enterLoop )
{
// run the main loop
- retValue = wxTheApp->OnRun();
+ wxTheApp->OnRun();
}
else
{
}
}
- wxTheApp->OnExit();
+ retValue = wxTheApp->OnExit();
wxEntryCleanup();
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
// Send idle event to window and all subwindows
bool wxApp::SendIdleEvents(wxWindow* win)
{
- bool needMore = FALSE;
-
wxIdleEvent event;
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
- if (event.MoreRequested())
- needMore = TRUE;
+ bool needMore = event.MoreRequested();
- wxNode* node = win->GetChildren().First();
- while (node)
+ wxWindowList::Node *node = win->GetChildren().GetFirst();
+ while ( node )
{
- wxWindow* win = (wxWindow*) node->Data();
+ wxWindow *win = node->GetData();
if (SendIdleEvents(win))
needMore = TRUE;
- node = node->Next();
+ node = node->GetNext();
}
+
return needMore;
}
void wxApp::DeletePendingObjects()
{
- wxNode *node = wxPendingDelete.First();
+ wxNode *node = wxPendingDelete.GetFirst();
while (node)
{
- wxObject *obj = (wxObject *)node->Data();
+ wxObject *obj = node->GetData();
delete obj;
// Deleting one object may have deleted other pending
// objects, so start from beginning of list again.
- node = wxPendingDelete.First();
+ node = wxPendingDelete.GetFirst();
}
}
// MT-FIXME
static bool s_inYield = FALSE;
+#if wxUSE_LOG
// disable log flushing from here because a call to wxYield() shouldn't
// normally result in message boxes popping up &c
wxLog::Suspend();
+#endif // wxUSE_LOG
if ( s_inYield )
{
// if there are pending events, we must process them.
ProcessPendingEvents();
+#if wxUSE_LOG
// let the logs be flashed again
wxLog::Resume();
+#endif // wxUSE_LOG
s_inYield = FALSE;
// For some reason, with MSVC++ 1.5, WinMain isn't linked in properly
// if in a separate file. So include it here to ensure it's linked.
-#if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__) && !defined(WXMAKINGDLL))
+#if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__WINE__) && !defined(__TWIN32__) && !defined(WXMAKINGDLL))
#include "main.cpp"
#endif