X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17a1ebd101f0653e69736416a2a28d0ada423141..4c81b43195fca7768fe5b7db1a93b51b41b8f28a:/src/gtk/combobox.cpp diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index ee5fdba2a5..517993327f 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: combobox.cpp +// Name: src/gtk/combobox.cpp // Purpose: // Author: Robert Roebling // Id: $Id$ @@ -75,18 +75,29 @@ gtk_popup_hide_callback(GtkCombo *WXUNUSED(gtk_combo), wxComboBox *combo) { // when the popup is hidden, throw a SELECTED event only if the combobox // selection changed. - int curSelection = combo->GetCurrentSelection(); - if (g_SelectionBeforePopup != curSelection) + const int curSelection = combo->GetCurrentSelection(); + + const bool hasChanged = curSelection != g_SelectionBeforePopup; + + // reset the selection flag to value meaning that it is hidden and do it + // now, before generating the events, so that GetSelection() returns the + // new value from the event handler + g_SelectionBeforePopup = wxID_NONE; + + if ( hasChanged ) { wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, combo->GetId() ); event.SetInt( curSelection ); event.SetString( combo->GetStringSelection() ); event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - } - // reset the selection flag to value meaning that it is hidden - g_SelectionBeforePopup = wxID_NONE; + // for consistency with the other ports, send TEXT event + wxCommandEvent event2( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() ); + event2.SetString( combo->GetStringSelection() ); + event2.SetEventObject( combo ); + combo->GetEventHandler()->ProcessEvent( event2 ); + } } } @@ -144,7 +155,7 @@ gtk_combo_select_child_callback( GtkList *WXUNUSED(list), GtkWidget *WXUNUSED(wi event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - // for consistencu with the other ports, don't generate text update + // for consistency with the other ports, don't generate text update // events while the user is browsing the combobox neither wxCommandEvent event2( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() ); event2.SetString( combo->GetValue() ); @@ -217,7 +228,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, // Disable GTK's broken events ... gtk_signal_disconnect( GTK_OBJECT(combo->entry), combo->entry_change_id ); - // ... and add surogate handler. + // ... and add surrogate handler. combo->entry_change_id = gtk_signal_connect (GTK_OBJECT (combo->entry), "changed", (GtkSignalFunc) gtk_dummy_callback, combo); @@ -527,7 +538,7 @@ void wxComboBox::SetString(int n, const wxString &text) InvalidateBestSize(); } -int wxComboBox::FindString( const wxString &item ) const +int wxComboBox::FindString( const wxString &item, bool bCase ) const { wxCHECK_MSG( m_widget != NULL, wxNOT_FOUND, wxT("invalid combobox") ); @@ -544,7 +555,7 @@ int wxComboBox::FindString( const wxString &item ) const #else wxString str( label->label ); #endif - if (item == str) + if (item.IsSameAs( str , bCase ) ) return count; count++;