diff --git a/ChangeLog b/ChangeLog index 45ba2eda0d..69f3ffc02d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +Mon Nov 17 00:11:21 2003 Kristian Rietveld + + Fixes #124373, Murray Cumming. + + * gtk/gtkcombobox.[ch] (gtk_combo_box_class_init): the model property + is no longer construct only, + (gtk_combo_box_unset_model), (gtk_combo_box_set_model_internal), + (gtk_combo_box_menu_fill): new functions, + (gtk_combo_box_menu_setup), (gtk_combo_box_menu_destroy), + (gtk_combo_box_menu_row_*), (gtk_combo_box_list_setup), + (gtk_combo_box_list_destroy): updated, + (gtk_combo_box_new), (gtk_combo_box_new_with_model): new/changed + functions, + (gtk_combo_box_set_model): is now public, updated, + (gtk_combo_box_get_model): small update. + + * gtk/gtkcomboboxentry.[ch] (gtk_combo_box_entry_class_init): the + text_column property is no longer construct only, + (gtk_combo_box_entry_set_text_column): now public, + (gtk_combo_box_entry_new), (gtk_combo_box_entry_new_with_model): + new/changed functions. + + * tests/testcombo.c: updated. + Sun Nov 16 22:50:58 2003 Matthias Clasen Reinstate fixes for (#124212, Marco Pesenti Gritti): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 45ba2eda0d..69f3ffc02d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,27 @@ +Mon Nov 17 00:11:21 2003 Kristian Rietveld + + Fixes #124373, Murray Cumming. + + * gtk/gtkcombobox.[ch] (gtk_combo_box_class_init): the model property + is no longer construct only, + (gtk_combo_box_unset_model), (gtk_combo_box_set_model_internal), + (gtk_combo_box_menu_fill): new functions, + (gtk_combo_box_menu_setup), (gtk_combo_box_menu_destroy), + (gtk_combo_box_menu_row_*), (gtk_combo_box_list_setup), + (gtk_combo_box_list_destroy): updated, + (gtk_combo_box_new), (gtk_combo_box_new_with_model): new/changed + functions, + (gtk_combo_box_set_model): is now public, updated, + (gtk_combo_box_get_model): small update. + + * gtk/gtkcomboboxentry.[ch] (gtk_combo_box_entry_class_init): the + text_column property is no longer construct only, + (gtk_combo_box_entry_set_text_column): now public, + (gtk_combo_box_entry_new), (gtk_combo_box_entry_new_with_model): + new/changed functions. + + * tests/testcombo.c: updated. + Sun Nov 16 22:50:58 2003 Matthias Clasen Reinstate fixes for (#124212, Marco Pesenti Gritti): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 45ba2eda0d..69f3ffc02d 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,27 @@ +Mon Nov 17 00:11:21 2003 Kristian Rietveld + + Fixes #124373, Murray Cumming. + + * gtk/gtkcombobox.[ch] (gtk_combo_box_class_init): the model property + is no longer construct only, + (gtk_combo_box_unset_model), (gtk_combo_box_set_model_internal), + (gtk_combo_box_menu_fill): new functions, + (gtk_combo_box_menu_setup), (gtk_combo_box_menu_destroy), + (gtk_combo_box_menu_row_*), (gtk_combo_box_list_setup), + (gtk_combo_box_list_destroy): updated, + (gtk_combo_box_new), (gtk_combo_box_new_with_model): new/changed + functions, + (gtk_combo_box_set_model): is now public, updated, + (gtk_combo_box_get_model): small update. + + * gtk/gtkcomboboxentry.[ch] (gtk_combo_box_entry_class_init): the + text_column property is no longer construct only, + (gtk_combo_box_entry_set_text_column): now public, + (gtk_combo_box_entry_new), (gtk_combo_box_entry_new_with_model): + new/changed functions. + + * tests/testcombo.c: updated. + Sun Nov 16 22:50:58 2003 Matthias Clasen Reinstate fixes for (#124212, Marco Pesenti Gritti): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 45ba2eda0d..69f3ffc02d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,27 @@ +Mon Nov 17 00:11:21 2003 Kristian Rietveld + + Fixes #124373, Murray Cumming. + + * gtk/gtkcombobox.[ch] (gtk_combo_box_class_init): the model property + is no longer construct only, + (gtk_combo_box_unset_model), (gtk_combo_box_set_model_internal), + (gtk_combo_box_menu_fill): new functions, + (gtk_combo_box_menu_setup), (gtk_combo_box_menu_destroy), + (gtk_combo_box_menu_row_*), (gtk_combo_box_list_setup), + (gtk_combo_box_list_destroy): updated, + (gtk_combo_box_new), (gtk_combo_box_new_with_model): new/changed + functions, + (gtk_combo_box_set_model): is now public, updated, + (gtk_combo_box_get_model): small update. + + * gtk/gtkcomboboxentry.[ch] (gtk_combo_box_entry_class_init): the + text_column property is no longer construct only, + (gtk_combo_box_entry_set_text_column): now public, + (gtk_combo_box_entry_new), (gtk_combo_box_entry_new_with_model): + new/changed functions. + + * tests/testcombo.c: updated. + Sun Nov 16 22:50:58 2003 Matthias Clasen Reinstate fixes for (#124212, Marco Pesenti Gritti): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 45ba2eda0d..69f3ffc02d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,27 @@ +Mon Nov 17 00:11:21 2003 Kristian Rietveld + + Fixes #124373, Murray Cumming. + + * gtk/gtkcombobox.[ch] (gtk_combo_box_class_init): the model property + is no longer construct only, + (gtk_combo_box_unset_model), (gtk_combo_box_set_model_internal), + (gtk_combo_box_menu_fill): new functions, + (gtk_combo_box_menu_setup), (gtk_combo_box_menu_destroy), + (gtk_combo_box_menu_row_*), (gtk_combo_box_list_setup), + (gtk_combo_box_list_destroy): updated, + (gtk_combo_box_new), (gtk_combo_box_new_with_model): new/changed + functions, + (gtk_combo_box_set_model): is now public, updated, + (gtk_combo_box_get_model): small update. + + * gtk/gtkcomboboxentry.[ch] (gtk_combo_box_entry_class_init): the + text_column property is no longer construct only, + (gtk_combo_box_entry_set_text_column): now public, + (gtk_combo_box_entry_new), (gtk_combo_box_entry_new_with_model): + new/changed functions. + + * tests/testcombo.c: updated. + Sun Nov 16 22:50:58 2003 Matthias Clasen Reinstate fixes for (#124212, Marco Pesenti Gritti): diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index 6f2576482b..b94964a67d 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -138,9 +138,6 @@ static void gtk_combo_box_get_property (GObject *object, GValue *value, GParamSpec *spec); -static void gtk_combo_box_set_model (GtkComboBox *combo_box, - GtkTreeModel *model); - static void gtk_combo_box_style_set (GtkWidget *widget, GtkStyle *previous_style, gpointer data); @@ -171,6 +168,9 @@ static gint gtk_combo_box_calc_requested_width (GtkComboBox *combo_box, GtkTreePath *path); static void gtk_combo_box_remeasure (GtkComboBox *combo_box); +static void gtk_combo_box_unset_model (GtkComboBox *combo_box); +static void gtk_combo_box_set_model_internal (GtkComboBox *combo_box); + static void gtk_combo_box_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_combo_box_size_allocate (GtkWidget *widget, @@ -204,6 +204,7 @@ static void gtk_combo_box_list_row_changed (GtkTreeModel *model, /* menu */ static void gtk_combo_box_menu_setup (GtkComboBox *combo_box, gboolean add_childs); +static void gtk_combo_box_menu_fill (GtkComboBox *combo_box); static void gtk_combo_box_menu_destroy (GtkComboBox *combo_box); static void gtk_combo_box_item_get_size (GtkComboBox *combo_box, @@ -335,7 +336,7 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass) _("ComboBox model"), _("The model for the combo box"), GTK_TYPE_TREE_MODEL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_WRAP_WIDTH, @@ -491,23 +492,6 @@ gtk_combo_box_get_property (GObject *object, } } -static void -gtk_combo_box_set_model (GtkComboBox *combo_box, - GtkTreeModel *model) -{ - if (combo_box->priv->model) - return; - - combo_box->priv->model = model; - g_object_ref (G_OBJECT (combo_box->priv->model)); - - if (combo_box->priv->cell_view) - gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view), - combo_box->priv->model); - gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->measurer), - combo_box->priv->model); -} - static void gtk_combo_box_style_set (GtkWidget *widget, GtkStyle *previous_style, @@ -1047,6 +1031,68 @@ gtk_combo_box_size_allocate (GtkWidget *widget, } } +static void +gtk_combo_box_unset_model (GtkComboBox *combo_box) +{ + if (!combo_box->priv->tree_view) + { + /* menu mode */ + g_signal_handler_disconnect (combo_box->priv->model, + combo_box->priv->inserted_id); + g_signal_handler_disconnect (combo_box->priv->model, + combo_box->priv->deleted_id); + g_signal_handler_disconnect (combo_box->priv->model, + combo_box->priv->changed_id); + + combo_box->priv->inserted_id = + combo_box->priv->deleted_id = + combo_box->priv->changed_id = -1; + + if (combo_box->priv->popup_widget) + gtk_container_foreach (GTK_CONTAINER (combo_box->priv->popup_widget), + (GtkCallback)gtk_widget_destroy, NULL); + } + else + { + /* list mode */ + g_signal_handler_disconnect (combo_box->priv->model, + combo_box->priv->changed_id); + combo_box->priv->changed_id = -1; + } +} + +static void +gtk_combo_box_set_model_internal (GtkComboBox *combo_box) +{ + if (!combo_box->priv->tree_view) + { + /* menu mode */ + combo_box->priv->inserted_id = + g_signal_connect (combo_box->priv->model, "row_inserted", + G_CALLBACK (gtk_combo_box_menu_row_inserted), + combo_box); + combo_box->priv->deleted_id = + g_signal_connect (combo_box->priv->model, "row_deleted", + G_CALLBACK (gtk_combo_box_menu_row_deleted), + combo_box); + combo_box->priv->changed_id = + g_signal_connect (combo_box->priv->model, "row_changed", + G_CALLBACK (gtk_combo_box_menu_row_changed), + combo_box); + } + else + { + /* list mode */ + gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view), + combo_box->priv->model); + + combo_box->priv->changed_id = + g_signal_connect (combo_box->priv->model, "row_changed", + G_CALLBACK (gtk_combo_box_list_row_changed), + combo_box); + } +} + static void gtk_combo_box_forall (GtkContainer *container, gboolean include_internals, @@ -1160,9 +1206,7 @@ static void gtk_combo_box_menu_setup (GtkComboBox *combo_box, gboolean add_childs) { - gint i, items; GtkWidget *box; - GtkWidget *tmp; if (combo_box->priv->cell_view) { @@ -1204,19 +1248,6 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box, gtk_widget_show_all (combo_box->priv->button); } - combo_box->priv->inserted_id = - g_signal_connect (combo_box->priv->model, "row_inserted", - G_CALLBACK (gtk_combo_box_menu_row_inserted), - combo_box); - combo_box->priv->deleted_id = - g_signal_connect (combo_box->priv->model, "row_deleted", - G_CALLBACK (gtk_combo_box_menu_row_deleted), - combo_box); - combo_box->priv->changed_id = - g_signal_connect (combo_box->priv->model, "row_changed", - G_CALLBACK (gtk_combo_box_menu_row_changed), - combo_box); - g_signal_connect (combo_box->priv->button, "button_press_event", G_CALLBACK (gtk_combo_box_menu_button_press), combo_box); @@ -1226,10 +1257,22 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box, gtk_combo_box_set_popup_widget (combo_box, box); /* add items */ - if (!add_childs) + if (add_childs) + gtk_combo_box_menu_fill (combo_box); +} + +static void +gtk_combo_box_menu_fill (GtkComboBox *combo_box) +{ + gint i, items; + GtkWidget *menu; + GtkWidget *tmp; + + if (!combo_box->priv->model) return; items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL); + menu = combo_box->priv->popup_widget; for (i = 0; i < items; i++) { @@ -1242,9 +1285,10 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box, G_CALLBACK (gtk_combo_box_menu_item_activate), combo_box); - cell_view_sync_cells (combo_box, GTK_CELL_VIEW (GTK_BIN (tmp)->child)); + cell_view_sync_cells (combo_box, + GTK_CELL_VIEW (GTK_BIN (tmp)->child)); - gtk_menu_shell_append (GTK_MENU_SHELL (box), tmp); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), tmp); gtk_widget_show (tmp); gtk_tree_path_free (path); @@ -1255,22 +1299,13 @@ static void gtk_combo_box_menu_destroy (GtkComboBox *combo_box) { /* disconnect signal handlers */ - g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->inserted_id); - g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->deleted_id); - g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->changed_id); + gtk_combo_box_unset_model (combo_box); g_signal_handlers_disconnect_matched (combo_box->priv->button, G_SIGNAL_MATCH_DATA, 0, 0, NULL, gtk_combo_box_menu_button_press, NULL); - combo_box->priv->inserted_id = - combo_box->priv->deleted_id = - combo_box->priv->changed_id = -1; - /* unparent will remove our latest ref */ if (combo_box->priv->cell_view) { @@ -1513,6 +1548,9 @@ gtk_combo_box_menu_row_inserted (GtkTreeModel *model, GtkWidget *item; GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); + if (!combo_box->priv->popup_widget) + return; + menu = combo_box->priv->popup_widget; g_return_if_fail (GTK_IS_MENU (menu)); @@ -1538,6 +1576,9 @@ gtk_combo_box_menu_row_deleted (GtkTreeModel *model, GtkWidget *item; GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); + if (!combo_box->priv->popup_widget) + return; + index = gtk_tree_path_get_indices (path)[0]; items = gtk_tree_model_iter_n_children (model, NULL); @@ -1562,6 +1603,9 @@ gtk_combo_box_menu_row_changed (GtkTreeModel *model, GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); gint width; + if (!combo_box->priv->popup_widget) + return; + if (combo_box->priv->wrap_width) gtk_combo_box_relayout_item (combo_box, gtk_tree_path_get_indices (path)[0]); @@ -1636,13 +1680,7 @@ gtk_combo_box_list_setup (GtkComboBox *combo_box) combo_box->priv->column); /* set the models */ - gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view), - combo_box->priv->model); - - combo_box->priv->changed_id = - g_signal_connect (combo_box->priv->model, "row_changed", - G_CALLBACK (gtk_combo_box_list_row_changed), - combo_box); + gtk_combo_box_set_model_internal (combo_box); /* sync up */ for (i = combo_box->priv->cells; i; i = i->next) @@ -1690,9 +1728,7 @@ static void gtk_combo_box_list_destroy (GtkComboBox *combo_box) { /* disconnect signals */ - g_signal_handler_disconnect (combo_box->priv->model, - combo_box->priv->changed_id); - combo_box->priv->changed_id = -1; + gtk_combo_box_unset_model (combo_box); g_signal_handlers_disconnect_matched (combo_box->priv->tree_view, G_SIGNAL_MATCH_DATA, @@ -2213,6 +2249,21 @@ gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout *layout, /** * gtk_combo_box_new: + * + * Creates a new empty #GtkComboBox. + * + * Return value: A new #GtkComboBox. + * + * Since: 2.4 + */ +GtkWidget * +gtk_combo_box_new (void) +{ + return GTK_WIDGET (g_object_new (gtk_combo_box_get_type (), NULL)); +} + +/** + * gtk_combo_box_new_with_model: * @model: A #GtkTreeModel. * * Creates a new #GtkComboBox with the model initialized to @model. @@ -2222,7 +2273,7 @@ gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout *layout, * Since: 2.4 */ GtkWidget * -gtk_combo_box_new (GtkTreeModel *model) +gtk_combo_box_new_with_model (GtkTreeModel *model) { GtkComboBox *combo_box; @@ -2454,6 +2505,43 @@ gtk_combo_box_set_active_iter (GtkComboBox *combo_box, gtk_tree_path_free (path); } +/** + * gtk_combo_box_set_model: + * @combo_box: A #GtkComboBox. + * @model: A #GtkTreeModel. + * + * Sets the model used by @combo_box to be @model. Will unset a + * previously set model (if applicable). + * + * Since: 2.4 + */ +void +gtk_combo_box_set_model (GtkComboBox *combo_box, + GtkTreeModel *model) +{ + g_return_if_fail (GTK_IS_COMBO_BOX (combo_box)); + g_return_if_fail (GTK_IS_TREE_MODEL (model)); + + if (combo_box->priv->model) + { + gtk_combo_box_unset_model (combo_box); + g_object_unref (G_OBJECT (combo_box->priv->model)); + } + + combo_box->priv->model = model; + g_object_ref (G_OBJECT (combo_box->priv->model)); + + gtk_combo_box_set_model_internal (combo_box); + if (!combo_box->priv->tree_view && combo_box->priv->popup_widget) + gtk_combo_box_menu_fill (combo_box); + + if (combo_box->priv->cell_view) + gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view), + combo_box->priv->model); + gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->measurer), + combo_box->priv->model); +} + /** * gtk_combo_box_get_model * @combo_box: A #GtkComboBox. @@ -2497,7 +2585,7 @@ gtk_combo_box_new_text (void) store = gtk_list_store_new (1, G_TYPE_STRING); - combo_box = gtk_combo_box_new (GTK_TREE_MODEL (store)); + combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)); cell = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE); diff --git a/gtk/gtkcombobox.h b/gtk/gtkcombobox.h index a38e2c7721..891a6464d5 100644 --- a/gtk/gtkcombobox.h +++ b/gtk/gtkcombobox.h @@ -62,7 +62,8 @@ struct _GtkComboBoxClass /* construction */ GType gtk_combo_box_get_type (void); -GtkWidget *gtk_combo_box_new (GtkTreeModel *model); +GtkWidget *gtk_combo_box_new (void); +GtkWidget *gtk_combo_box_new_with_model (GtkTreeModel *model); /* grids */ void gtk_combo_box_set_wrap_width (GtkComboBox *combo_box, @@ -77,11 +78,13 @@ gint gtk_combo_box_get_active (GtkComboBox *combo_box); void gtk_combo_box_set_active (GtkComboBox *combo_box, gint index); gboolean gtk_combo_box_get_active_iter (GtkComboBox *combo_box, - GtkTreeIter *iter); + GtkTreeIter *iter); void gtk_combo_box_set_active_iter (GtkComboBox *combo_box, - GtkTreeIter *iter); + GtkTreeIter *iter); /* getters and setters */ +void gtk_combo_box_set_model (GtkComboBox *combo_box, + GtkTreeModel *model); GtkTreeModel *gtk_combo_box_get_model (GtkComboBox *combo_box); /* convenience -- text */ diff --git a/gtk/gtkcomboboxentry.c b/gtk/gtkcomboboxentry.c index 184e1301d2..adcd970309 100644 --- a/gtk/gtkcomboboxentry.c +++ b/gtk/gtkcomboboxentry.c @@ -51,8 +51,6 @@ static void gtk_combo_box_entry_active_changed (GtkComboBox *combo_b gpointer user_data); static void gtk_combo_box_entry_contents_changed (GtkEntry *entry, gpointer user_data); -static void gtk_combo_box_entry_set_text_column (GtkComboBoxEntry *entry_box, - gint text_column); enum @@ -108,7 +106,7 @@ gtk_combo_box_entry_class_init (GtkComboBoxEntryClass *klass) -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_READWRITE)); g_type_class_add_private ((GObjectClass *) klass, sizeof (GtkComboBoxEntryPrivate)); @@ -228,33 +226,34 @@ gtk_combo_box_entry_contents_changed (GtkEntry *entry, NULL); } -static void -gtk_combo_box_entry_set_text_column (GtkComboBoxEntry *entry_box, - gint text_column) -{ - g_return_if_fail (text_column >= 0); - g_return_if_fail (text_column < gtk_tree_model_get_n_columns (gtk_combo_box_get_model (GTK_COMBO_BOX (entry_box)))); - g_return_if_fail (entry_box->priv->text_column == -1); - - entry_box->priv->text_column = text_column; - - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (entry_box), - entry_box->priv->text_renderer, - "text", text_column, - NULL); -} - /* public API */ /** * gtk_combo_box_entry_new: + * + * Creates a new #GtkComboBoxEntry which has a #GtkEntry as child. After + * construction, you should set a model using gtk_combo_box_set_model() and a + * text_column * using gtk_combo_box_entry_set_text_column(). + * + * Return value: A new #GtkComboBoxEntry. + * + * Since: 2.4 + */ +GtkWidget * +gtk_combo_box_entry_new (void) +{ + return GTK_WIDGET (g_object_new (gtk_combo_box_entry_get_type (), NULL)); +} + +/** + * gtk_combo_box_entry_new_with_model: * @model: A #GtkTreeModel. * @text_column: A column in @model to get the strings from. * * Creates a new #GtkComboBoxEntry which has a #GtkEntry as child and a list * of strings as popup. You can get the #GtkEntry from a #GtkComboBoxEntry * using GTK_ENTRY (GTK_BIN (combo_box_entry)->child). To add and remove - * strings from the list, just modify @model using it's data manipulation + * strings from the list, just modify @model using its data manipulation * API. * * Return value: A new #GtkComboBoxEntry. @@ -262,8 +261,8 @@ gtk_combo_box_entry_set_text_column (GtkComboBoxEntry *entry_box, * Since: 2.4 */ GtkWidget * -gtk_combo_box_entry_new (GtkTreeModel *model, - gint text_column) +gtk_combo_box_entry_new_with_model (GtkTreeModel *model, + gint text_column) { GtkWidget *ret; @@ -279,12 +278,37 @@ gtk_combo_box_entry_new (GtkTreeModel *model, return ret; } +/** + * gtk_combo_box_entry_set_text_column: + * @entry_box: A #GtkComboBoxEntry. + * @text_column: A column in @model to get the strings from. + * + * Sets the model column which @entry_box should use to get strings from + * to be @text_column. + * + * Since: 2.4. + */ +void +gtk_combo_box_entry_set_text_column (GtkComboBoxEntry *entry_box, + gint text_column) +{ + g_return_if_fail (text_column >= 0); + g_return_if_fail (text_column < gtk_tree_model_get_n_columns (gtk_combo_box_get_model (GTK_COMBO_BOX (entry_box)))); + g_return_if_fail (entry_box->priv->text_column == -1); + + entry_box->priv->text_column = text_column; + + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (entry_box), + entry_box->priv->text_renderer, + "text", text_column, + NULL); +} + /** * gtk_combo_box_entry_get_text_column: * @entry_box: A #GtkComboBoxEntry. * * Returns the column which @entry_box is using to get the strings from. - * This is the same column which got passed during construction. * * Return value: A column in the data source model of @entry_box. * diff --git a/gtk/gtkcomboboxentry.h b/gtk/gtkcomboboxentry.h index f0075d1a26..9b120427a2 100644 --- a/gtk/gtkcomboboxentry.h +++ b/gtk/gtkcomboboxentry.h @@ -57,9 +57,12 @@ struct _GtkComboBoxEntryClass GType gtk_combo_box_entry_get_type (void); -GtkWidget *gtk_combo_box_entry_new (GtkTreeModel *model, +GtkWidget *gtk_combo_box_entry_new (void); +GtkWidget *gtk_combo_box_entry_new_with_model (GtkTreeModel *model, gint text_column); +void gtk_combo_box_entry_set_text_column (GtkComboBoxEntry *entry_box, + gint text_column); gint gtk_combo_box_entry_get_text_column (GtkComboBoxEntry *entry_box);