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

Reply via email to