Delete pending objects in wxApp::ProcessPendingEvents() and not ProcessIdle().

Move DeletePendingObjects() call from ProcessPendingEvents() to ProcessIdle()
to ensure that we delete the objects marked for destruction even if the
application is sitting in a tight OnIdle() loop, i.e. if the idle event
handler keeps requesting more events.

Also make sure that the event loop terminates if its OnExit() was called even
if the idle event handler continues to request more events.

Closes #12424.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2010-11-22 01:22:56 +00:00
parent 86c6fc77e1
commit e819ca3aa5
2 changed files with 4 additions and 4 deletions

View File

@ -370,6 +370,9 @@ bool wxAppConsoleBase::ProcessIdle()
wxLog::FlushActive();
#endif
// Garbage collect all objects previously scheduled for destruction.
DeletePendingObjects();
return event.MoreRequested();
}
@ -509,9 +512,6 @@ void wxAppConsoleBase::ProcessPendingEvents()
wxLEAVE_CRIT_SECT(m_handlersWithPendingEventsLocker);
}
// Garbage collect all objects previously scheduled for destruction.
DeletePendingObjects();
}
void wxAppConsoleBase::DeletePendingEvents()

View File

@ -139,7 +139,7 @@ int wxEventLoopManual::Run()
// generate and process idle events for as long as we don't
// have anything else to do
while ( !Pending() && ProcessIdle() )
while ( !Pending() && ProcessIdle() && !m_shouldExit )
;
// if the "should exit" flag is set, the loop should terminate