/** * gtk_combo_box_text_get_active_text: * @combo_box: A #GtkComboBoxText * * Returns the currently active string in @combo_box, or %NULL * if none is selected. If @combo_box contains an entry, this * function will return its contents (which will not necessarily * be an item from the list). * * Returns: (transfer full): a newly allocated string containing the * currently active text. Must be freed with g_free(). * * Since: 2.24 */ gchar * gtk_combo_box_text_get_active_text (GtkComboBoxText *combo_box) { GtkTreeIter iter; gchar *text = NULL; g_return_val_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box), NULL); if (gtk_combo_box_get_has_entry (GTK_COMBO_BOX (combo_box))) { GtkWidget *entry; entry = gtk_bin_get_child (GTK_BIN (combo_box)); text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); } else if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter)) { GtkTreeModel *model; gint text_column; gint column_type; model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box)); g_return_val_if_fail (GTK_IS_LIST_STORE (model), NULL); text_column = gtk_combo_box_get_entry_text_column (GTK_COMBO_BOX (combo_box)); g_return_val_if_fail (text_column >= 0, NULL); column_type = gtk_tree_model_get_column_type (model, text_column); g_return_val_if_fail (column_type == G_TYPE_STRING, NULL); gtk_tree_model_get (model, &iter, text_column, &text, -1); } return text; }
/** The completion attached to currency edit widget has selected a * match. This function extracts the completed string from the * completion code's temporary model, and uses that to set the index * of that currency name for use when the user leaves the widget. * This should always point to a valid currency name since the user * made the selection from a list of currency names. * * @param completion Unused. * * @param comp_model A temporary model used by completion code that * contains only the current matches. * * @param comp_iter The iter in the completion's temporary model * that represents the user selected match. * * @param cbwe A pointer to a currency entry widget. */ static gboolean gnc_cbwe_match_selected_cb (GtkEntryCompletion *completion, GtkTreeModel *comp_model, GtkTreeIter *comp_iter, GtkComboBox *cbwe) { gint column; gchar *text; column = gtk_combo_box_get_entry_text_column(cbwe); gtk_tree_model_get(comp_model, comp_iter, column, &text, -1); gnc_cbwe_set_by_string(cbwe, text); g_free(text); return FALSE; }
/** * gtk_combo_box_text_insert: * @combo_box: A #GtkComboBoxText * @position: An index to insert @text * @id: (allow-none): a string ID for this value, or %NULL * @text: A string to display * * Inserts @text at @position in the list of strings stored in @combo_box. * If @id is non-%NULL then it is used as the ID of the row. See * #GtkComboBox:id-column. * * If @position is negative then @text is appended. * * Since: 3.0 */ void gtk_combo_box_text_insert (GtkComboBoxText *combo_box, gint position, const gchar *id, const gchar *text) { GtkListStore *store; GtkTreeIter iter; gint text_column; gint column_type; g_return_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box)); g_return_if_fail (text != NULL); store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box))); g_return_if_fail (GTK_IS_LIST_STORE (store)); text_column = gtk_combo_box_get_entry_text_column (GTK_COMBO_BOX (combo_box)); if (gtk_combo_box_get_has_entry (GTK_COMBO_BOX (combo_box))) g_return_if_fail (text_column >= 0); else if (text_column < 0) text_column = 0; column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), text_column); g_return_if_fail (column_type == G_TYPE_STRING); if (position < 0) gtk_list_store_append (store, &iter); else gtk_list_store_insert (store, &iter, position); gtk_list_store_set (store, &iter, text_column, text, -1); if (id != NULL) { gint id_column; id_column = gtk_combo_box_get_id_column (GTK_COMBO_BOX (combo_box)); g_return_if_fail (id_column >= 0); column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), id_column); g_return_if_fail (column_type == G_TYPE_STRING); gtk_list_store_set (store, &iter, id_column, id, -1); } }
static void gn_combo_history_set_popdown_strings (GnComboHistory *history) { GtkTreeModel *model; GtkTreeIter iter; GSList *items; gchar *text; gint text_column, i; g_return_if_fail (GN_IS_COMBO_HISTORY (history)); g_return_if_fail (GTK_IS_COMBO_BOX (history->priv->combo)); model = gtk_combo_box_get_model (history->priv->combo); if (!model) return; text_column = gtk_combo_box_get_entry_text_column ( GTK_COMBO_BOX (history->priv->combo)); gtk_list_store_clear (GTK_LIST_STORE (model)); if (! history->priv->items) { gtk_combo_box_set_active (GTK_COMBO_BOX (history->priv->combo), -1); return; } i = 0; for (items = history->priv->items; items; items = items->next) { text = items->data; gtk_list_store_insert (GTK_LIST_STORE (model), &iter, i); gtk_list_store_set (GTK_LIST_STORE (model), &iter, text_column, text, -1); i ++; } /* At this point the current selection always be at the first place in the model */ gtk_combo_box_set_active (GTK_COMBO_BOX (history->priv->combo), 0); }
/** Find an entry in the GtkComboBox by its text value, and set * the widget to that value. This function also records the index of * that text value for use when the user leaves the widget. * * @param cbwe A pointer to a GtkComboBox with entry widget. * * @param text The entry text to find in the model of the combo box * entry. */ void gnc_cbwe_set_by_string(GtkComboBox *cbwe, const gchar *text) { GtkTreeModel *model; GtkTreeIter iter; gchar *tree_string; gint column, index, id; gboolean match; model = gtk_combo_box_get_model(GTK_COMBO_BOX(cbwe)); if (!gtk_tree_model_get_iter_first(model, &iter)) { /* empty tree */ gtk_combo_box_set_active(GTK_COMBO_BOX(cbwe), -1); return; } column = gtk_combo_box_get_entry_text_column(cbwe); do { gtk_tree_model_get(model, &iter, column, &tree_string, -1); match = g_utf8_collate(text, tree_string) == 0; g_free(tree_string); if (!match) continue; /* Found a matching string */ id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cbwe), CHANGED_ID)); g_signal_handler_block(cbwe, id); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(cbwe), &iter); g_signal_handler_unblock(cbwe, id); index = gtk_combo_box_get_active(GTK_COMBO_BOX(cbwe)); g_object_set_data(G_OBJECT(cbwe), LAST_INDEX, GINT_TO_POINTER(index)); return; } while (gtk_tree_model_iter_next(model, &iter)); }