-// 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);
- win->GetEventHandler()->ProcessEvent(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;
-}
-
-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
-
-}
-
-// ----------------------------------------------------------------------------
-// exception handling
-// ----------------------------------------------------------------------------
-
-#if wxUSE_EXCEPTIONS
-
-void wxAppBase::HandleEvent(wxEvtHandler *handler,
- wxEventFunction func,
- wxEvent& event) const
-{
- // by default, call wxApp::OnExceptionInMainLoop if an exception occurs
- try
- {
- handler->DoHandleEvent(func, event);
- }
- catch ( ... )
- {
- if ( !wxConstCast(this, wxAppBase)->OnExceptionInMainLoop() )
- {
- wxEventLoop *loop = wxEventLoop::GetActive();
- if ( loop )
- loop->Exit(-1);
- }
- //else: continue running the event loop
- }
-}
-
-#endif // wxUSE_EXCEPTIONS
-