static gboolean vdtree_clicked_on_expander(GtkTreeView *treeview, GtkTreePath *tpath, GtkTreeViewColumn *column, gint x, gint y, gint *left_of_expander) { gint depth; gint size; gint sep; gint exp_width; if (column != gtk_tree_view_get_expander_column(treeview)) return FALSE; gtk_widget_style_get(GTK_WIDGET(treeview), "expander-size", &size, "horizontal-separator", &sep, NULL); depth = gtk_tree_path_get_depth(tpath); exp_width = sep + size + sep; if (x <= depth * exp_width) { if (left_of_expander) *left_of_expander = !(x >= (depth - 1) * exp_width); return TRUE; } return FALSE; }
gboolean qtcTreeViewCellIsLeftOfExpanderColumn(GtkTreeView *treeView, GtkTreeViewColumn *column) { // check expander column GtkTreeViewColumn *expanderColumn = gtk_tree_view_get_expander_column(treeView); if (!expanderColumn || column == expanderColumn) { return false; } else { bool found = false; bool isLeft = false; // get all columns GList *columns = gtk_tree_view_get_columns(treeView); for (GList *child = columns;child;child = g_list_next(child)) { if (!GTK_IS_TREE_VIEW_COLUMN(child->data)) { continue; } GtkTreeViewColumn *childCol = GTK_TREE_VIEW_COLUMN(child->data); if (childCol == expanderColumn) { if (found) { isLeft = true; } } else if (found) { break; } else if (column == childCol) { found = true; } } if (columns) { g_list_free(columns); } return isLeft; } }