From b94372f199ff2eab34c349aa6410b5a90a4e7eb3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 18 Oct 2010 08:19:59 -0400 Subject: [PATCH] Don't add a second cell renderer When has-entry is TRUE, GtkComboBox already adds a cell renderer for the text column, so avoid adding a second one in GtkComboBoxText. https://bugzilla.gnome.org/show_bug.cgi?id=632381 (cherry picked from commit b613cc64786a95ea069d3d308906133165062315) --- gtk/gtkcomboboxtext.c | 52 +++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/gtk/gtkcomboboxtext.c b/gtk/gtkcomboboxtext.c index e19da4345e..ea508b6a00 100644 --- a/gtk/gtkcomboboxtext.c +++ b/gtk/gtkcomboboxtext.c @@ -45,30 +45,50 @@ G_DEFINE_TYPE (GtkComboBoxText, gtk_combo_box_text, GTK_TYPE_COMBO_BOX); -static void -gtk_combo_box_text_class_init (GtkComboBoxTextClass *klass) +static GObject * +gtk_combo_box_text_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) { + GObject *object; + + object = G_OBJECT_CLASS (gtk_combo_box_text_parent_class)->constructor + (type, n_construct_properties, construct_properties); + + if (!gtk_combo_box_get_has_entry (GTK_COMBO_BOX (object))) + { + GtkCellRenderer *cell; + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), cell, + "text", 0, + NULL); + } + + return object; } static void gtk_combo_box_text_init (GtkComboBoxText *combo_box) { GtkListStore *store; - GtkCellRenderer *cell; store = gtk_list_store_new (1, G_TYPE_STRING); gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), GTK_TREE_MODEL (store)); g_object_unref (store); - - gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (combo_box), 0); - - cell = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell, - "text", 0, - NULL); } +static void +gtk_combo_box_text_class_init (GtkComboBoxTextClass *klass) +{ + GObjectClass *object_class; + + object_class = (GObjectClass *)klass; + object_class->constructor = gtk_combo_box_text_constructor; +} + + /** * gtk_combo_box_text_new: * @@ -82,10 +102,11 @@ gtk_combo_box_text_init (GtkComboBoxText *combo_box) GtkWidget * gtk_combo_box_text_new (void) { - return g_object_new (GTK_TYPE_COMBO_BOX_TEXT, NULL); + return g_object_new (GTK_TYPE_COMBO_BOX_TEXT, + "entry-text-column", 0, + NULL); } - /** * gtk_combo_box_text_new_with_entry: * @@ -99,7 +120,10 @@ gtk_combo_box_text_new (void) GtkWidget * gtk_combo_box_text_new_with_entry (void) { - return g_object_new (GTK_TYPE_COMBO_BOX_TEXT, "has-entry", TRUE, NULL); + return g_object_new (GTK_TYPE_COMBO_BOX_TEXT, + "has-entry", TRUE, + "entry-text-column", 0, + NULL); } /**