wxDeleteStockLists();
- delete wxTheColourDatabase;
- wxTheColourDatabase = NULL;
+ wxDELETE(wxTheColourDatabase);
wxAppConsole::CleanUp();
}
while (node)
{
wxWindow* win = node->GetData();
- if (SendIdleEvents(win, event))
+ if (win->SendIdleEvents(event))
needMore = true;
node = node->GetNext();
}
return needMore;
}
-// Send idle event to window and all subwindows
-bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event)
-{
- bool needMore = false;
-
- win->OnInternalIdle();
-
- // should we send idle event to this window?
- if ( wxIdleEvent::GetMode() == wxIDLE_PROCESS_ALL ||
- win->HasExtraStyle(wxWS_EX_PROCESS_IDLE) )
- {
- event.SetEventObject(win);
- win->HandleWindowEvent(event);
-
- if (event.MoreRequested())
- needMore = true;
- }
- wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
- while ( node )
- {
- wxWindow *child = node->GetData();
- if (SendIdleEvents(child, event))
- needMore = true;
-
- node = node->GetNext();
- }
-
- return needMore;
-}
-
// ----------------------------------------------------------------------------
// wxGUIAppTraitsBase
// ----------------------------------------------------------------------------
wxLog *wxGUIAppTraitsBase::CreateLogTarget()
{
#if wxUSE_LOGGUI
+#ifndef __WXOSX_IPHONE__
return new wxLogGui;
+#else
+ return new wxLogStderr;
+#endif
#else
// we must have something!
return new wxLogStderr;
bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg)
{
+#if wxDEBUG_LEVEL
// under MSW we prefer to use the base class version using ::MessageBox()
// even if wxMessageBox() is available because it has less chances to
// double fault our app than our wxMessageBox()
//
// and finally we can't use wxMessageBox() if it wasn't compiled in, of
// course
-#if defined(__WXMSW__) || defined(__WXDFB__) || !wxUSE_MSGDLG
- return wxAppTraitsBase::ShowAssertDialog(msg);
-#else // wxUSE_MSGDLG
-#if wxDEBUG_LEVEL
- wxString msgDlg = msg;
+#if !defined(__WXMSW__) && !defined(__WXDFB__) && wxUSE_MSGDLG
+
+ // we can't (safely) show the GUI dialog from another thread, only do it
+ // for the asserts in the main thread
+ if ( wxIsMainThread() )
+ {
+ wxString msgDlg = msg;
#if wxUSE_STACKWALKER
- // on Unix stack frame generation may take some time, depending on the
- // size of the executable mainly... warn the user that we are working
- wxFprintf(stderr, wxT("[Debug] Generating a stack trace... please wait"));
- fflush(stderr);
-
- const wxString stackTrace = GetAssertStackTrace();
- if ( !stackTrace.empty() )
- msgDlg << wxT("\n\nCall stack:\n") << stackTrace;
+ const wxString stackTrace = GetAssertStackTrace();
+ if ( !stackTrace.empty() )
+ msgDlg << wxT("\n\nCall stack:\n") << stackTrace;
#endif // wxUSE_STACKWALKER
- // this message is intentionally not translated -- it is for
- // developpers only
- msgDlg += wxT("\nDo you want to stop the program?\n")
- wxT("You can also choose [Cancel] to suppress ")
- wxT("further warnings.");
+ // this message is intentionally not translated -- it is for
+ // developpers only
+ msgDlg += wxT("\nDo you want to stop the program?\n")
+ wxT("You can also choose [Cancel] to suppress ")
+ wxT("further warnings.");
- switch ( wxMessageBox(msgDlg, wxT("wxWidgets Debug Alert"),
- wxYES_NO | wxCANCEL | wxICON_STOP ) )
- {
- case wxYES:
- wxTrap();
- break;
+ switch ( wxMessageBox(msgDlg, wxT("wxWidgets Debug Alert"),
+ wxYES_NO | wxCANCEL | wxICON_STOP ) )
+ {
+ case wxYES:
+ wxTrap();
+ break;
- case wxCANCEL:
- // no more asserts
- return true;
+ case wxCANCEL:
+ // no more asserts
+ return true;
+
+ //case wxNO: nothing to do
+ }
- //case wxNO: nothing to do
+ return false;
}
-#else // !wxDEBUG_LEVEL
- // this function always exists (for ABI compatibility) but is never called
- // if debug level is 0 and so can simply do nothing then
- wxUnusedVar(msg);
-#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL
+#endif // wxUSE_MSGDLG
+#endif // wxDEBUG_LEVEL
- return false;
-#endif // !wxUSE_MSGDLG/wxUSE_MSGDLG
+ return wxAppTraitsBase::ShowAssertDialog(msg);
}
bool wxGUIAppTraitsBase::HasStderr()