]> git.saurik.com Git - wxWidgets.git/commitdiff
Preserve client data pointers when setting bitmaps in wxBitmapComboBox.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Feb 2013 13:48:49 +0000 (13:48 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Feb 2013 13:48:49 +0000 (13:48 +0000)
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

src/msw/bmpcbox.cpp

index 73cce59d09c7f7d3a3342fc737d2e091fa640499..ea7c92576212856b755726712ed204b603eafcab 100644 (file)
@@ -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<wxClientData*> 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