]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/choice.cpp
mingw32 compilation fixes
[wxWidgets.git] / src / msw / choice.cpp
index ee3e51151530d732f56d03b2b2596c8919f50d27..90714d1e5ad0a88d8dc52708e1aa06e5276b6cd8 100644 (file)
@@ -85,6 +85,11 @@ bool wxChoice::Create(wxWindow *parent,
     return TRUE;
 }
 
+wxChoice::~wxChoice()
+{
+    Free();
+}
+
 // ----------------------------------------------------------------------------
 // adding/deleting items to/from the list
 // ----------------------------------------------------------------------------
@@ -113,6 +118,13 @@ void wxChoice::Delete(int n)
 }
 
 void wxChoice::Clear()
+{
+    Free();
+
+    SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0);
+}
+
+void wxChoice::Free()
 {
     if ( HasClientObjectData() )
     {
@@ -122,8 +134,6 @@ void wxChoice::Clear()
             delete GetClientObject(n);
         }
     }
-
-    SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0);
 }
 
 // ----------------------------------------------------------------------------
@@ -216,7 +226,7 @@ void* wxChoice::DoGetItemClientData( int n ) const
         wxLogLastError(wxT("CB_GETITEMDATA"));
 
         // unfortunately, there is no way to return an error code to the user
-       rc = (LPARAM) NULL;
+        rc = (LPARAM) NULL;
     }
 
     return (void *)rc;
@@ -307,11 +317,19 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
         return FALSE;
     }
 
-    wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
-    event.SetInt(GetSelection());
-    event.SetEventObject(this);
-    event.SetString(GetStringSelection());
-    ProcessCommand(event);
+    int n = GetSelection();
+    if (n > -1)
+    {
+        wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
+        event.SetInt(n);
+        event.SetEventObject(this);
+        event.SetString(GetStringSelection());
+        if ( HasClientObjectData() )
+            event.SetClientObject( GetClientObject(n) );
+        else if ( HasClientUntypedData() )
+            event.SetClientData( GetClientData(n) );
+        ProcessCommand(event);
+    }
 
     return TRUE;
 }