From: Vadim Zeitlin Date: Sun, 24 Feb 2013 13:48:49 +0000 (+0000) Subject: Preserve client data pointers when setting bitmaps in wxBitmapComboBox. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4f082fb3a0685321b174f8b7beb8ea357da227a2 Preserve client data pointers when setting bitmaps in wxBitmapComboBox. Changing the bitmap could recreate the control if the height of the bitmap changed but recreating wxBitmapComboBox lost all the client data pointers. Do preserve them now when recreating. Closes #14892. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp index 73cce59d09..ea7c925762 100644 --- a/src/msw/bmpcbox.cpp +++ b/src/msw/bmpcbox.cpp @@ -31,6 +31,7 @@ #endif #include "wx/settings.h" +#include "wx/vector.h" #include "wx/msw/dcclient.h" #include "wx/msw/private.h" @@ -134,6 +135,12 @@ void wxBitmapComboBox::RecreateControl() 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)); + wxComboBox::DoClear(); HWND hwnd = GetHwnd(); @@ -146,7 +153,7 @@ void wxBitmapComboBox::RecreateControl() // initialize the controls contents for ( unsigned int i = 0; i < strings.size(); i++ ) { - wxComboBox::Append(strings[i]); + wxComboBox::Append(strings[i], clientData[i]); } // and make sure it has the same attributes as before