summaryrefslogtreecommitdiff
path: root/tests/testtreepos.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2011-02-05 01:24:21 -0500
committerMatthias Clasen <mclasen@redhat.com>2011-02-05 01:24:21 -0500
commit19092fe44f6eabbea8d1a6aaa5f8d2463963c91d (patch)
tree13ff41654374e1a9ef40bfa3d9322879f232b744 /tests/testtreepos.c
parent8f870ddcdcad57e0f03070d50f2ae4279012c274 (diff)
downloadgtk+-19092fe44f6eabbea8d1a6aaa5f8d2463963c91d.tar.gz
Add a testcase for cell positions
Diffstat (limited to 'tests/testtreepos.c')
-rw-r--r--tests/testtreepos.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/testtreepos.c b/tests/testtreepos.c
new file mode 100644
index 0000000000..09e08ecced
--- /dev/null
+++ b/tests/testtreepos.c
@@ -0,0 +1,123 @@
+#include <gtk/gtk.h>
+
+static gboolean
+clicked_icon (GtkTreeView *tv,
+ gint x,
+ gint y,
+ GtkTreePath **path)
+{
+ GtkTreeViewColumn *col;
+ gint cell_x, cell_y;
+ gint cell_pos, cell_width;
+ GList *cells, *l;
+
+ if (gtk_tree_view_get_path_at_pos (tv, x, y, path, &col, &cell_x, &cell_y))
+ {
+ cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (col));
+
+ for (l = cells; l; l = l->next)
+ {
+ gtk_tree_view_column_cell_get_position (col, l->data, &cell_pos, &cell_width);
+ if (cell_pos <= cell_x && cell_x <= cell_pos + cell_width)
+ {
+ g_print ("clicked in %s\n", g_type_name_from_instance (l->data));
+ if (GTK_IS_CELL_RENDERER_PIXBUF (l->data))
+ {
+ g_list_free (cells);
+ return TRUE;
+ }
+ }
+ }
+
+ g_list_free (cells);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+release_event (GtkTreeView *tv,
+ GdkEventButton *event)
+{
+ GtkTreePath *path;
+
+ if (event->type != GDK_BUTTON_RELEASE)
+ return TRUE;
+
+ if (clicked_icon (tv, event->x, event->y, &path))
+ {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gchar *text;
+
+ model = gtk_tree_view_get_model (tv);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter, 0, &text, -1);
+
+ g_print ("text was: %s\n", text);
+ g_free (text);
+ gtk_tree_path_free (path);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+int main (int argc, char *argv[])
+{
+ GtkWidget *window;
+ GtkWidget *sw;
+ GtkWidget *tv;
+ GtkTreeViewColumn *col;
+ GtkCellRenderer *cell;
+ GtkTreeStore *store;
+ GtkTreeIter iter;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (window), sw);
+ tv = gtk_tree_view_new ();
+ gtk_container_add (GTK_CONTAINER (sw), tv);
+
+ col = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (col, cell, TRUE);
+ gtk_tree_view_column_add_attribute (col, cell, "text", 0);
+
+ cell = gtk_cell_renderer_toggle_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_add_attribute (col, cell, "active", 1);
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (col, cell, TRUE);
+ gtk_tree_view_column_add_attribute (col, cell, "text", 0);
+
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_add_attribute (col, cell, "stock-id", 2);
+
+ cell = gtk_cell_renderer_toggle_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_add_attribute (col, cell, "active", 1);
+
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tv), col);
+
+ store = gtk_tree_store_new (3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
+ gtk_tree_store_insert_with_values (store, NULL, NULL, 0, 0, "One row", 1, FALSE, 2, "gtk-open", -1);
+ gtk_tree_store_insert_with_values (store, &iter, NULL, 1, 0, "Two row", 1, FALSE, 2, "gtk-file", -1);
+ gtk_tree_store_insert_with_values (store, NULL, &iter, 0, 0, "Three row", 1, FALSE, 2, "gtk-file", -1);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tv), GTK_TREE_MODEL (store));
+
+ g_signal_connect (tv, "button-release-event",
+ G_CALLBACK (release_event), NULL);
+
+ gtk_widget_show_all (window);
+
+ gtk_main ();
+
+ return 0;
+}