+#ifdef __WXGTK3__
+ return GetDefaultAttributesFromGTKWidget(gtk_combo_box_new_with_entry(), true);
+#else
+ return GetDefaultAttributesFromGTKWidget(gtk_combo_box_entry_new(), true);
+#endif
+}
+
+void wxComboBox::SetValue(const wxString& value)
+{
+ if ( HasFlag(wxCB_READONLY) )
+ SetStringSelection(value);
+ else
+ wxTextEntry::SetValue(value);
+}
+
+void wxComboBox::SetString(unsigned int n, const wxString& text)
+{
+ wxChoice::SetString(n, text);
+
+ if ( static_cast<int>(n) == GetSelection() )
+ {
+ // We also need to update the currently shown text, for consistency
+ // with wxMSW and also because it makes sense as leaving the old string
+ // in the text but not in the list would be confusing to the user.
+ SetValue(text);
+
+ // And we need to keep the selection unchanged, modifying the item is
+ // not supposed to deselect it.
+ SetSelection(n);
+ }