]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/choice.cpp
Improve wxMenu docs
[wxWidgets.git] / src / gtk / choice.cpp
index 2e160d2287c4d920700328a69d45a70ef2f79ba1..8f25aa9632eae89568b00cd1df64d2341d45d6f8 100644 (file)
@@ -62,7 +62,7 @@ static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *
     else if ( choice->HasClientUntypedData() )
         event.SetClientData( choice->GetClientData(n) );
 
-    choice->GetEventHandler()->ProcessEvent(event);
+    choice->HandleWindowEvent(event);
 }
 }
 
@@ -127,6 +127,13 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id,
     PostCreation(size);
     SetInitialSize(size); // need this too because this is a wxControlWithItems
 
+    // workaround for bug in gtk_option_menu_set_history(), it causes
+    // gtk_widget_size_allocate() to be called with the current
+    // widget->allocation values, which will be zero if a proper
+    // size_allocate has not occured yet
+    m_widget->allocation.width = m_width;
+    m_widget->allocation.height = m_height;
+
     return true;
 }
 
@@ -222,8 +229,8 @@ void wxChoice::DoDeleteOneItem(unsigned int n)
 
     wxArrayString items;
     wxArrayPtrVoid itemsData;
-    items.Alloc(count);
-    itemsData.Alloc(count);
+    items.Alloc(count - 1);
+    itemsData.Alloc(count - 1);
     for ( unsigned i = 0; i < count; i++ )
     {
         if ( i != n )
@@ -235,11 +242,15 @@ void wxChoice::DoDeleteOneItem(unsigned int n)
 
     wxChoice::DoClear();
 
-    void ** const data = &itemsData[0];
-    if ( HasClientObjectData() )
-        Append(items, wx_reinterpret_cast(wxClientData **, data));
-    else
-        Append(items, data);
+    if ( count > 1 )
+    {
+        void ** const data = &itemsData[0];
+        if ( HasClientObjectData() )
+            Append(items, wx_reinterpret_cast(wxClientData **, data));
+        else
+            Append(items, data);
+    }
+    //else: the control is now empty, nothing to append
 }
 
 int wxChoice::FindString( const wxString &string, bool bCase ) const