4 clicked_icon (GtkTreeView *tv,
9 GtkTreeViewColumn *col;
11 gint cell_pos, cell_width;
14 if (gtk_tree_view_get_path_at_pos (tv, x, y, path, &col, &cell_x, &cell_y))
16 cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (col));
18 for (l = cells; l; l = l->next)
20 gtk_tree_view_column_cell_get_position (col, l->data, &cell_pos, &cell_width);
21 if (cell_pos <= cell_x && cell_x <= cell_pos + cell_width)
23 g_print ("clicked in %s\n", g_type_name_from_instance (l->data));
24 if (GTK_IS_CELL_RENDERER_PIXBUF (l->data))
39 release_event (GtkTreeView *tv,
40 GdkEventButton *event)
44 if (event->type != GDK_BUTTON_RELEASE)
47 if (clicked_icon (tv, event->x, event->y, &path))
53 model = gtk_tree_view_get_model (tv);
54 gtk_tree_model_get_iter (model, &iter, path);
55 gtk_tree_model_get (model, &iter, 0, &text, -1);
57 g_print ("text was: %s\n", text);
59 gtk_tree_path_free (path);
67 int main (int argc, char *argv[])
72 GtkTreeViewColumn *col;
73 GtkCellRenderer *cell;
77 gtk_init (&argc, &argv);
79 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
80 sw = gtk_scrolled_window_new (NULL, NULL);
81 gtk_container_add (GTK_CONTAINER (window), sw);
82 tv = gtk_tree_view_new ();
83 gtk_container_add (GTK_CONTAINER (sw), tv);
85 col = gtk_tree_view_column_new ();
86 cell = gtk_cell_renderer_text_new ();
87 gtk_tree_view_column_pack_start (col, cell, TRUE);
88 gtk_tree_view_column_add_attribute (col, cell, "text", 0);
90 cell = gtk_cell_renderer_toggle_new ();
91 gtk_tree_view_column_pack_start (col, cell, FALSE);
92 gtk_tree_view_column_add_attribute (col, cell, "active", 1);
94 cell = gtk_cell_renderer_text_new ();
95 gtk_tree_view_column_pack_start (col, cell, TRUE);
96 gtk_tree_view_column_add_attribute (col, cell, "text", 0);
98 cell = gtk_cell_renderer_pixbuf_new ();
99 gtk_tree_view_column_pack_start (col, cell, FALSE);
100 gtk_tree_view_column_add_attribute (col, cell, "stock-id", 2);
102 cell = gtk_cell_renderer_toggle_new ();
103 gtk_tree_view_column_pack_start (col, cell, FALSE);
104 gtk_tree_view_column_add_attribute (col, cell, "active", 1);
106 gtk_tree_view_append_column (GTK_TREE_VIEW (tv), col);
108 store = gtk_tree_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
109 gtk_tree_store_insert_with_values (store, NULL, NULL, 0, 0, "One row", 1, FALSE, 2, "gtk-open", -1);
110 gtk_tree_store_insert_with_values (store, &iter, NULL, 1, 0, "Two row", 1, FALSE, 2, "gtk-file", -1);
111 gtk_tree_store_insert_with_values (store, NULL, &iter, 0, 0, "Three row", 1, FALSE, 2, "gtk-file", -1);
113 gtk_tree_view_set_model (GTK_TREE_VIEW (tv), GTK_TREE_MODEL (store));
115 g_signal_connect (tv, "button-release-event",
116 G_CALLBACK (release_event), NULL);
118 gtk_widget_show_all (window);