X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/385e8575dd1f9219fb0e3f7fa26ffe4c24d2fdbb..7d6a4d96961eac84d05db8bb24c64d39003f6e54:/src/gtk/combobox.cpp diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 045c6166ba..a67b4a852b 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -21,7 +21,9 @@ #include "wx/arrstr.h" #endif +#include #include "wx/gtk/private.h" +#include "wx/gtk/private/gtk2-compat.h" // ---------------------------------------------------------------------------- // GTK callbacks @@ -170,7 +172,9 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, g_signal_connect_after (m_widget, "changed", G_CALLBACK (gtkcombobox_changed_callback), this); +#ifndef __WXGTK3__ if ( !gtk_check_version(2,10,0) ) +#endif { g_signal_connect (m_widget, "notify::popup-shown", G_CALLBACK (gtkcombobox_popupshown_callback), this); @@ -183,7 +187,11 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, void wxComboBox::GTKCreateComboBoxWidget() { +#ifdef __WXGTK3__ + m_widget = gtk_combo_box_text_new_with_entry(); +#else m_widget = gtk_combo_box_entry_new_text(); +#endif g_object_ref(m_widget); m_entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(m_widget))); @@ -264,14 +272,23 @@ GtkWidget* wxComboBox::GetConnectWidget() GdkWindow* wxComboBox::GTKGetWindow(wxArrayGdkWindows& /* windows */) const { +#ifdef __WXGTK3__ + // no access to internal GdkWindows + return NULL; +#else return gtk_entry_get_text_window(GetEntry()); +#endif } // static wxVisualAttributes wxComboBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { +#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) @@ -282,6 +299,23 @@ void wxComboBox::SetValue(const wxString& value) wxTextEntry::SetValue(value); } +void wxComboBox::SetString(unsigned int n, const wxString& text) +{ + wxChoice::SetString(n, text); + + if ( static_cast(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); + } +} + // ---------------------------------------------------------------------------- // standard event handling // ----------------------------------------------------------------------------