+#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);
+    }