X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11e62fe658531aaa2891351f19bd0a4c076717ae..e90411c2c1a2808a7f76667ca683c1e21d11ea09:/src/gtk/combobox.cpp diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 3480b84904..517993327f 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -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);