From f858486cecc5f6fa3d06b609ef1ca3a2cc896095 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Sat, 18 Oct 2014 09:37:33 +0000 Subject: [PATCH] Fix deleting pending editor controls if wxPG is destructed from within its own event handler. If wxPG dtor is invoked from within event handler then deleting its pending editor controls should be delegated to the global idle event handler. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/propgrid/propgrid.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 111624837a..29b50ab6d7 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -539,8 +539,26 @@ wxPropertyGrid::~wxPropertyGrid() wxS("Close(false).)") ); } - // Delete pending editor controls - DeletePendingObjects(); + if ( m_processedEvent ) + { + // We are inside event handler and we cannot delete + // editor objects immediatelly. They have to be deleted + // later on in the global idle handler. +#if !WXWIN_COMPATIBILITY_3_0 + while ( !m_deletedEditorObjects.empty() ) + { + wxObject* obj = m_deletedEditorObjects.back(); + m_deletedEditorObjects.pop_back(); + + wxPendingDelete.Append(obj); + } +#endif + } + else + { + // Delete pending editor controls + DeletePendingObjects(); + } if ( m_doubleBuffer ) delete m_doubleBuffer;