X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f082fb3a0685321b174f8b7beb8ea357da227a2..43c42c18d36c703a88b1b7b697bac27fe5608eca:/src/msw/bmpcbox.cpp diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp index ea7c925762..e81db2d2dd 100644 --- a/src/msw/bmpcbox.cpp +++ b/src/msw/bmpcbox.cpp @@ -133,13 +133,31 @@ void wxBitmapComboBox::RecreateControl() wxPoint pos = GetPosition(); wxSize size = GetSize(); size.y = GetBestSize().y; - wxArrayString strings = GetStrings(); - - // Save the client data pointers before clearing the control. - wxVector clientData; - clientData.reserve(strings.size()); - for ( size_t n = 0; n < strings.size(); ++n ) - clientData.push_back(GetClientObject(n)); + const wxArrayString strings = GetStrings(); + const unsigned numItems = strings.size(); + unsigned i; + + // Save the client data pointers before clearing the control, if any. + const wxClientDataType clientDataType = GetClientDataType(); + wxVector objectClientData; + wxVector voidClientData; + switch ( clientDataType ) + { + case wxClientData_None: + break; + + case wxClientData_Object: + objectClientData.reserve(numItems); + for ( i = 0; i < numItems; ++i ) + objectClientData.push_back(GetClientObject(i)); + break; + + case wxClientData_Void: + voidClientData.reserve(numItems); + for ( i = 0; i < numItems; ++i ) + voidClientData.push_back(GetClientData(i)); + break; + } wxComboBox::DoClear(); @@ -151,9 +169,14 @@ void wxBitmapComboBox::RecreateControl() return; // initialize the controls contents - for ( unsigned int i = 0; i < strings.size(); i++ ) + for ( i = 0; i < numItems; i++ ) { - wxComboBox::Append(strings[i], clientData[i]); + wxComboBox::Append(strings[i]); + + if ( !objectClientData.empty() ) + SetClientObject(i, objectClientData[i]); + else if ( !voidClientData.empty() ) + SetClientData(i, objectClientData[i]); } // and make sure it has the same attributes as before