]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/choice.cpp
Improve wxMenu docs
[wxWidgets.git] / src / gtk / choice.cpp
index b63c3c68bc760e9289ca7377472850a4bb7e36ca..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;
 }
 
@@ -163,6 +170,12 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items,
         m_selection_hack += count;
     }
 
+    // We must set the selection so that it can be read back even if 
+    // the user has not modified it since GTK+ will then select the
+    // first item so well return 0.
+    if ((count > 0) && (m_selection_hack==wxNOT_FOUND))
+        m_selection_hack = 0;
+
     return pos - 1;
 }
 
@@ -216,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 )
@@ -229,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