From 1e005ad1fdc1ce9bdc8b4339f1d58a32e9d9e761 Mon Sep 17 00:00:00 2001 From: Jaakko Salli Date: Tue, 28 Sep 2010 18:59:41 +0000 Subject: [PATCH] Reset wxPGEditor singleton instance pointers in dtors. This is useful if wxPropertyGrid is being accessed from an external main loop. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65666 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/propgrid/advprops.cpp | 4 ++-- src/propgrid/editors.cpp | 36 +++++++++++++++++++++++++++--------- src/propgrid/propgrid.cpp | 4 ++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index 140ae4295f..72e1fcfb14 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -240,12 +240,12 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(SpinCtrl, wxPGEditor) -// Trivial destructor. +// Destructor. It is useful to reset the global pointer in it. wxPGSpinCtrlEditor::~wxPGSpinCtrlEditor() { + wxPG_EDITOR(SpinCtrl) = NULL; } - // Create controls and initialize event handling. wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property, const wxPoint& pos, const wxSize& sz ) const diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index e22b376018..28819bcf79 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -507,7 +507,12 @@ void wxPGTextCtrlEditor::OnFocus( wxPGProperty* property, wxPGTextCtrlEditor_OnFocus(property, tc); } -wxPGTextCtrlEditor::~wxPGTextCtrlEditor() { } +wxPGTextCtrlEditor::~wxPGTextCtrlEditor() +{ + // Reset the global pointer. Useful when wxPropertyGrid is accessed + // from an external main loop. + wxPG_EDITOR(TextCtrl) = NULL; +} // ----------------------------------------------------------------------- @@ -1216,7 +1221,10 @@ bool wxPGChoiceEditor::CanContainCustomImage() const } -wxPGChoiceEditor::~wxPGChoiceEditor() { } +wxPGChoiceEditor::~wxPGChoiceEditor() +{ + wxPG_EDITOR(Choice) = NULL; +} // ----------------------------------------------------------------------- @@ -1300,7 +1308,11 @@ void wxPGComboBoxEditor::OnFocus( wxPGProperty* property, } -wxPGComboBoxEditor::~wxPGComboBoxEditor() { } +wxPGComboBoxEditor::~wxPGComboBoxEditor() +{ + wxPG_EDITOR(ComboBox) = NULL; +} + // ----------------------------------------------------------------------- @@ -1352,8 +1364,10 @@ wxPGWindowList wxPGChoiceAndButtonEditor::CreateControls( wxPropertyGrid* propGr } -wxPGChoiceAndButtonEditor::~wxPGChoiceAndButtonEditor() { } - +wxPGChoiceAndButtonEditor::~wxPGChoiceAndButtonEditor() +{ + wxPG_EDITOR(ChoiceAndButton) = NULL; +} // ----------------------------------------------------------------------- // wxPGTextCtrlAndButtonEditor @@ -1377,8 +1391,10 @@ wxPGWindowList wxPGTextCtrlAndButtonEditor::CreateControls( wxPropertyGrid* prop } -wxPGTextCtrlAndButtonEditor::~wxPGTextCtrlAndButtonEditor() { } - +wxPGTextCtrlAndButtonEditor::~wxPGTextCtrlAndButtonEditor() +{ + wxPG_EDITOR(TextCtrlAndButton) = NULL; +} // ----------------------------------------------------------------------- // wxPGCheckBoxEditor @@ -1708,8 +1724,10 @@ void wxPGCheckBoxEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(property) } -wxPGCheckBoxEditor::~wxPGCheckBoxEditor() { } - +wxPGCheckBoxEditor::~wxPGCheckBoxEditor() +{ + wxPG_EDITOR(CheckBox) = NULL; +} #endif // wxPG_INCLUDE_CHECKBOX diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index d1dbf3dd88..3b9837b602 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -235,6 +235,10 @@ wxPGGlobalVarsClass::~wxPGGlobalVarsClass() delete ((wxPGEditor*)vt_it->second); } + // Make sure the global pointers have been reset + wxASSERT(wxPG_EDITOR(TextCtrl) == NULL); + wxASSERT(wxPG_EDITOR(ChoiceAndButton) == NULL); + delete wxPGProperty::sm_wxPG_LABEL; } -- 2.47.2