else if ( choice->HasClientUntypedData() )
event.SetClientData( choice->GetClientData(n) );
- choice->GetEventHandler()->ProcessEvent(event);
+ choice->HandleWindowEvent(event);
}
}
m_strings = new wxSortedArrayString;
}
- // begin with no selection
- m_selection_hack = wxNOT_FOUND;
+ // If we have items, GTK will choose the first item by default
+ m_selection_hack = n > 0 ? 0 : wxNOT_FOUND;
GtkWidget *menu = gtk_menu_new();
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;
}
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;
}
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 )
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