don't remove handlers from wxPendingEvents list, they now do it themselves when they don't have any more events or are destroyed (should have been part of r51021)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51022 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -359,21 +359,21 @@ void wxAppConsoleBase::ProcessPendingEvents()
|
|||||||
|
|
||||||
if (wxPendingEvents)
|
if (wxPendingEvents)
|
||||||
{
|
{
|
||||||
// iterate until the list becomes empty
|
// iterate until the list becomes empty: the handlers remove themselves
|
||||||
|
// from it when they don't have any more pending events
|
||||||
wxList::compatibility_iterator node = wxPendingEvents->GetFirst();
|
wxList::compatibility_iterator node = wxPendingEvents->GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxEvtHandler *handler = (wxEvtHandler *)node->GetData();
|
|
||||||
wxPendingEvents->Erase(node);
|
|
||||||
|
|
||||||
// In ProcessPendingEvents(), new handlers might be add
|
// In ProcessPendingEvents(), new handlers might be add
|
||||||
// and we can safely leave the critical section here.
|
// and we can safely leave the critical section here.
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
|
|
||||||
|
wxEvtHandler *handler = (wxEvtHandler *)node->GetData();
|
||||||
handler->ProcessPendingEvents();
|
handler->ProcessPendingEvents();
|
||||||
|
|
||||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
|
|
||||||
|
// restart as the iterators could have been invalidated
|
||||||
node = wxPendingEvents->GetFirst();
|
node = wxPendingEvents->GetFirst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user