/* Widget style set */ static void tilem_disasm_view_style_set(GtkWidget *w, GtkStyle *oldstyle) { TilemDisasmView *dv; GtkTreeModel *model; GtkTreeIter iter; GList *cols, *cp; GtkTreeViewColumn *col; int width; g_return_if_fail(TILEM_IS_DISASM_VIEW(w)); dv = TILEM_DISASM_VIEW(w); (*GTK_WIDGET_CLASS(parent_class)->style_set)(w, oldstyle); /* line height must be recalculated */ dv->line_height = 0; /* set column widths based on a dummy model */ model = new_dasm_model(); append_dummy_line(dv, model, &iter); cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(dv)); for (cp = cols; cp; cp = cp->next) { col = cp->data; gtk_tree_view_column_cell_set_cell_data(col, model, &iter, FALSE, FALSE); gtk_tree_view_column_cell_get_size(col, NULL, NULL, NULL, &width, NULL); gtk_tree_view_column_set_fixed_width(col, width + 2); } g_list_free(cols); g_object_unref(model); }
static VALUE tvc_cell_set_cell_data(VALUE self, VALUE model, VALUE iter, VALUE is_expander, VALUE is_expanded) { gtk_tree_view_column_cell_set_cell_data(_SELF(self), GTK_TREE_MODEL(RVAL2GOBJ(model)), RVAL2GTKTREEITER(iter), RVAL2CBOOL(is_expander), RVAL2CBOOL(is_expanded)); return self; }
GtkCellRenderer * gitg_utils_find_cell_at_pos (GtkTreeView *tree_view, GtkTreeViewColumn *column, GtkTreePath *path, gint x) { GList *cells; GList *item; GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model (tree_view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_view_column_cell_set_cell_data (column, model, &iter, FALSE, FALSE); cells = gtk_tree_view_column_get_cell_renderers (column); GtkCellRenderer *ret = NULL; for (item = cells; item; item = g_list_next (item)) { GtkCellRenderer *renderer = GTK_CELL_RENDERER (item->data); gint start; gint width; if (!gtk_tree_view_column_cell_get_position (column, renderer, &start, &width)) { continue; } gtk_cell_renderer_get_size (renderer, GTK_WIDGET (tree_view), NULL, NULL, NULL, &width, 0); if (x >= start && x <= start + width) { ret = renderer; break; } } g_list_free (cells); return ret; }