On 05-07-2018 11:02, Eduardo M KALINOWSKI wrote: > Consider the sample attached: it builds a tree model with an item that > has child items, and uses that model in a ComboBox. > > When compiled with Gtk2, when the item with children is selected and > its children displayed, and extra item representing the parent is > added to the top, allowing the parent to be selected. The attached > image should make that clearer. > > However, compiled with Gtk3, that item that allows selection of the > parent is missing, as the other image shows. > > So how does one select "Item with children", using the mouse, under > Gtk3? The item can be selected using the keyboard, but apparently with > the mouse. Is there a way to get the Gtk2 behaviour back with Gtk3?
The attachments didn't make it, so here's the code: ---- #include <gtk/gtk.h> GtkTreeModel *create_model() { GtkTreeStore *model; GtkTreeIter iter, child; model = gtk_tree_store_new(1, G_TYPE_STRING); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, 0, "Item with no children", -1); gtk_tree_store_append(model, &iter, NULL); gtk_tree_store_set(model, &iter, 0, "Item with children", -1); gtk_tree_store_append(model, &child, &iter); gtk_tree_store_set(model, &child, 0, "Child 1", -1); gtk_tree_store_append(model, &child, &iter); gtk_tree_store_set(model, &child, 0, "Child 2", -1); return GTK_TREE_MODEL(model); } void on_changed(GtkComboBox *widget, gpointer data) { GtkComboBox *combo = widget; GtkTreeIter iter; gchar *selected_text; if (gtk_combo_box_get_active_iter(combo, &iter)) { gtk_tree_model_get(gtk_combo_box_get_model(combo), &iter, 0, &selected_text, -1); printf("Selected: %s\n", selected_text); } } GtkWidget *create_combo(GtkTreeModel *model) { GtkWidget *combo; GtkCellRenderer *column; combo = gtk_combo_box_new_with_model(model); g_object_unref(model); column = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column, "text", 0, NULL); g_signal_connect(combo, "changed", G_CALLBACK(on_changed), NULL); return combo; } int main(int argc, char **argv) { GtkWidget *window, *combo; GtkTreeModel *model; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "delete_event", G_CALLBACK(gtk_main_quit), NULL); model = create_model(); combo = create_combo(model); gtk_container_add(GTK_CONTAINER(window), combo); gtk_widget_show_all(window); gtk_main(); return 0; } --- And the screenshots: - Gtk2: https://imgur.com/a/kcYx1Wt - Gtk3: https://imgur.com/a/VsuSz73 -- Kirk to Enterprise -- beam down yeoman Rand and a six-pack. Eduardo M KALINOWSKI edua...@kalinowski.com.br _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list