X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5109ae5d178fb4025c6b92bb2f840c07dae99a82..2d34a3036ee7d4f1d2b6caf8a1e47f67930a430a:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 8fa4b91bd4..dd1636b598 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -232,31 +232,13 @@ bool wxAppBase::ProcessIdle() return needMore; } -#if 0 -// Send idle event to all top-level windows -bool wxAppBase::SendIdleEvents() -{ - bool needMore = FALSE; - - wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); - while (node) - { - wxWindow* win = node->GetData(); - if (SendIdleEvents(win)) - needMore = TRUE; - node = node->GetNext(); - } - - return needMore; -} -#endif - // Send idle event to window and all subwindows bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) { bool needMore = FALSE; - + win->OnInternalIdle(); + if (wxIdleEvent::CanSend(win)) { event.SetEventObject(win); @@ -265,12 +247,11 @@ bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) if (event.MoreRequested()) needMore = TRUE; } - wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); while ( node ) { - wxWindow *win = node->GetData(); - if (SendIdleEvents(win, event)) + wxWindow *child = node->GetData(); + if (SendIdleEvents(child, event)) needMore = TRUE; node = node->GetNext(); @@ -279,6 +260,26 @@ bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) return needMore; } +void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event)) +{ + // If there are pending events, we must process them: pending events + // are either events to the threads other than main or events posted + // with wxPostEvent() functions + // GRG: I have moved this here so that all pending events are processed + // before starting to delete any objects. This behaves better (in + // particular, wrt wxPostEvent) and is coherent with wxGTK's current + // behaviour. Changed Feb/2000 before 2.1.14 + ProcessPendingEvents(); + + // 'Garbage' collection of windows deleted with Close(). + DeletePendingObjects(); + +#if wxUSE_LOG + // flush the logged messages if any + wxLog::FlushActive(); +#endif // wxUSE_LOG + +} // ---------------------------------------------------------------------------- // wxGUIAppTraitsBase