]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/combobox.cpp
Committing in .
[wxWidgets.git] / src / msw / combobox.cpp
index c5368a57d1d3bbc753c99dca88ac1cf640a9f465..6d31e99dbad9b9f263fed7445362e64e53322770 100644 (file)
@@ -231,11 +231,22 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
         case CBN_EDITCHANGE:
             {
                 wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId());
+
                 // if sel != -1, value was initialized above (and we can't use
                 // GetValue() here as it would return the old selection and we
                 // want the new one)
                 if ( sel == -1 )
+                {
                     value = GetValue();
+                }
+                else // we're synthesizing text updated event from sel change
+                {
+                    // we need to do this because the user code expects
+                    // wxComboBox::GetValue() to return the new value from
+                    // "text updated" handler but it hadn't been updated yet
+                    SetValue(value);
+                }
+
                 event.SetString(value);
                 event.SetEventObject(this);
                 ProcessCommand(event);
@@ -300,8 +311,6 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
     if ( !MSWCreateControl(_T("COMBOBOX"), msStyle) )
         return FALSE;
 
-    SetSize(pos.x, pos.y, size.x, size.y);
-
     // A choice/combobox normally has a white background (or other, depending
     // on global settings) rather than inheriting the parent's background colour.
     SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW));
@@ -316,6 +325,10 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
         SetValue(value);
     }
 
+    // do this after appending the values to the combobox so that autosizing
+    // works correctly
+    SetSize(pos.x, pos.y, size.x, size.y);
+
     // a (not read only) combobox is, in fact, 2 controls: the combobox itself
     // and an edit control inside it and if we want to catch events from this
     // edit control, we must subclass it as well