X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcombo.c;h=35734d70f1affa99d6019319d35b7d2213a23f4d;hb=b295f552ee5e236cf3bb0777b078fc14c80a06d2;hp=88004fb746601da2a35fff36a122217db1c76e94;hpb=a03f567e2fa6cee5cca419f03a967223aa8b131b;p=~andy%2Fgtk diff --git a/gtk/gtkcombo.c b/gtk/gtkcombo.c index 88004fb74..35734d70f 100644 --- a/gtk/gtkcombo.c +++ b/gtk/gtkcombo.c @@ -28,6 +28,8 @@ * The code here relies on all sorts of internal details of GTK+ */ +#undef GTK_DISABLE_DEPRECATED + #include #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",