X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/81f6ea4a29eb815dbed0adea369efdc8fece0269..98cb8dcb0cf3b0e660f1f67e1c02451ab10257de:/src/common/event.cpp diff --git a/src/common/event.cpp b/src/common/event.cpp index 31196f57c4..8b74ef2a81 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -1023,6 +1023,8 @@ wxEvtHandler::~wxEvtHandler() delete m_dynamicEvents; }; + if (m_pendingEvents) + m_pendingEvents->DeleteContents(true); delete m_pendingEvents; #if wxUSE_THREADS @@ -1101,7 +1103,7 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event) wxLEAVE_CRIT_SECT(*wxPendingEventsLocker); - // 3) Inform the system that new pending events are somwehere, + // 3) Inform the system that new pending events are somewhere, // and that these should be processed in idle time. wxWakeUpIdle(); } @@ -1126,6 +1128,9 @@ void wxEvtHandler::ProcessPendingEvents() { wxEvent *event = (wxEvent *)node->GetData(); + // It's importan we remove event from list before processing it. + // Else a nested event loop, for example from a modal dialog, might + // process the same event again. m_pendingEvents->Erase(node); wxLEAVE_CRIT_SECT( Lock() );