]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcombo.c
Add back the monitoring of the selection when the combo isn't popped down;
[~andy/gtk] / gtk / gtkcombo.c
index 88004fb746601da2a35fff36a122217db1c76e94..35734d70f1affa99d6019319d35b7d2213a23f4d 100644 (file)
@@ -28,6 +28,8 @@
  * The code here relies on all sorts of internal details of GTK+
  */
 
+#undef GTK_DISABLE_DEPRECATED
+
 #include <string.h>
 
 #include "gtkarrow.h"
@@ -669,6 +671,7 @@ gtk_combo_update_entry (GtkCombo * combo)
   GtkList *list = GTK_LIST (combo->list);
   char *text;
 
+  g_signal_handler_block (list, combo->list_change_id);
   if (list->selection)
     {
       text = gtk_combo_func (GTK_LIST_ITEM (list->selection->data));
@@ -676,6 +679,15 @@ gtk_combo_update_entry (GtkCombo * combo)
        text = "";
       gtk_entry_set_text (GTK_ENTRY (combo->entry), text);
     }
+  g_signal_handler_unblock (list, combo->list_change_id);
+}
+
+static void
+gtk_combo_selection_changed (GtkList  *list,
+                            GtkCombo *combo)
+{
+  if (!GTK_WIDGET_VISIBLE (combo->popwin))
+    gtk_combo_update_entry (combo);
 }
 
 static void
@@ -954,6 +966,9 @@ gtk_combo_init (GtkCombo * combo)
                                       gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (combo->popup)));
   gtk_widget_show (combo->list);
 
+  combo->list_change_id = g_signal_connect (combo->list, "selection_changed",
+                                           G_CALLBACK (gtk_combo_selection_changed), combo);
+  
   g_signal_connect (combo->popwin, "key_press_event",
                    G_CALLBACK (gtk_combo_list_key_press), combo);
   g_signal_connect (combo->popwin, "button_press_event",