X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e71a0aa95f767ab0302607b3c94dc155d72d5e61..f8c10ed8b399f864a8ab7fafe4f73ae0365d4827:/src/mac/carbon/combobox.cpp diff --git a/src/mac/carbon/combobox.cpp b/src/mac/carbon/combobox.cpp index 830e8564a7..5a911361cf 100644 --- a/src/mac/carbon/combobox.cpp +++ b/src/mac/carbon/combobox.cpp @@ -162,7 +162,10 @@ END_EVENT_TABLE() wxComboBox::~wxComboBox() { - // delete the controls now, don't leave them alive even though they would + // delete client objects + FreeData(); + + // delete the controls now, don't leave them alive even though they would // still be eventually deleted by our parent - but it will be too late, the // user code expects them to be gone now if (m_text != NULL) { @@ -414,31 +417,47 @@ int wxComboBox::DoInsert(const wxString& item, int pos) void wxComboBox::DoSetItemClientData(int n, void* clientData) { - return m_choice->SetClientData( n , clientData ) ; + return m_choice->DoSetItemClientData( n , clientData ) ; } void* wxComboBox::DoGetItemClientData(int n) const { - return m_choice->GetClientData( n ) ; + return m_choice->DoGetItemClientData( n ) ; } void wxComboBox::DoSetItemClientObject(int n, wxClientData* clientData) { - return m_choice->SetClientObject( n , clientData ) ; + return m_choice->DoSetItemClientObject( n , clientData ) ; } wxClientData* wxComboBox::DoGetItemClientObject(int n) const { - return m_choice->GetClientObject( n ) ; + return m_choice->DoGetItemClientObject( n ) ; +} + +void wxComboBox::FreeData() +{ + if ( HasClientObjectData() ) + { + size_t count = GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + SetClientObject( n, NULL ); + } + } } void wxComboBox::Delete(int n) { + // force client object deletion + if( HasClientObjectData() ) + SetClientObject( n, NULL ); m_choice->Delete( n ); } void wxComboBox::Clear() { + FreeData(); m_choice->Clear(); }