]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/combobox.cpp
Applied patch [ 1331340 ] faster Drawing of Polygons and Polylines
[wxWidgets.git] / src / gtk / combobox.cpp
index 3480b849047306342f16d50c08b2a0effd9ee911..517993327f502e7a4c842a1057dfb43738de4247 100644 (file)
@@ -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);