git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36330
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
delete m_dynamicEvents;
};
delete m_dynamicEvents;
};
+ if (m_pendingEvents)
+ m_pendingEvents->DeleteContents(true);
delete m_pendingEvents;
#if wxUSE_THREADS
delete m_pendingEvents;
#if wxUSE_THREADS
wxENTER_CRIT_SECT( Lock() );
if ( !m_pendingEvents )
wxENTER_CRIT_SECT( Lock() );
if ( !m_pendingEvents )
m_pendingEvents = new wxList;
m_pendingEvents = new wxList;
- m_pendingEvents->DeleteContents(true);
- }
m_pendingEvents->Append(eventCopy);
m_pendingEvents->Append(eventCopy);
{
wxEvent *event = (wxEvent *)node->GetData();
{
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() );
ProcessEvent(*event);
wxLEAVE_CRIT_SECT( Lock() );
ProcessEvent(*event);
wxENTER_CRIT_SECT( Lock() );
wxENTER_CRIT_SECT( Lock() );
- m_pendingEvents->Erase(node);
-