summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtktreeprivate.h7
-rw-r--r--gtk/gtktreeview.c126
-rw-r--r--gtk/gtktreeviewcolumn.c47
3 files changed, 52 insertions, 128 deletions
diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h
index 695e06d6aa..be630f8be0 100644
--- a/gtk/gtktreeprivate.h
+++ b/gtk/gtktreeprivate.h
@@ -108,8 +108,7 @@ void _gtk_tree_view_column_set_tree_view (GtkTreeViewColumn *column,
gint _gtk_tree_view_column_request_width (GtkTreeViewColumn *tree_column);
void _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column,
int x_offset,
- int width,
- int cell_width);
+ int width);
void _gtk_tree_view_column_unset_model (GtkTreeViewColumn *column,
GtkTreeModel *old_model);
void _gtk_tree_view_column_unset_tree_view (GtkTreeViewColumn *column);
@@ -136,8 +135,8 @@ void _gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
gboolean _gtk_tree_view_column_cell_get_dirty (GtkTreeViewColumn *tree_column);
GdkWindow *_gtk_tree_view_column_get_window (GtkTreeViewColumn *column);
-void _gtk_tree_view_column_set_requested_width (GtkTreeViewColumn *column,
- gint width);
+void _gtk_tree_view_column_push_padding (GtkTreeViewColumn *column,
+ gint padding);
gint _gtk_tree_view_column_get_requested_width (GtkTreeViewColumn *column);
void _gtk_tree_view_column_set_resized_width (GtkTreeViewColumn *column,
gint width);
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index a2f3846f04..c9ca131cbc 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -344,7 +344,6 @@ struct _GtkTreeViewPrivate
GtkRBNode *expanded_collapsed_node;
GtkRBTree *expanded_collapsed_tree;
guint expand_collapse_timeout;
- gint deepest_depth;
/* Auto expand/collapse timeout in hover mode */
guint auto_expand_timeout;
@@ -1759,8 +1758,6 @@ gtk_tree_view_init (GtkTreeView *tree_view)
tree_view->priv->event_last_x = -10000;
tree_view->priv->event_last_y = -10000;
- tree_view->priv->deepest_depth = 1;
-
gtk_tree_view_set_vadjustment (tree_view, NULL);
gtk_tree_view_set_hadjustment (tree_view, NULL);
}
@@ -2541,56 +2538,6 @@ invalidate_last_column (GtkTreeView *tree_view)
}
}
-static gboolean
-gtk_tree_view_column_is_edge (GtkTreeView *tree_view,
- GtkTreeViewColumn *column)
-{
- GtkTreeViewColumn *first_column = tree_view->priv->columns->data;
- GtkTreeViewColumn *last_column = g_list_last (tree_view->priv->columns)->data;
-
- return (column == first_column || column == last_column);
-}
-
-/* Gets the space in a column that is not actually distributed to
- * the internal cell area, i.e. total indentation expander size
- * grid line widths and horizontal separators */
-static gint
-gtk_tree_view_get_column_padding (GtkTreeView *tree_view,
- GtkTreeViewColumn *column)
-{
- gint padding;
- gint grid_line_width;
- gint horizontal_separator;
-
- /* Get the deepest depth */
-
- gtk_widget_style_get (GTK_WIDGET (tree_view),
- "horizontal-separator", &horizontal_separator,
- "grid-line-width", &grid_line_width,
- NULL);
-
- padding = horizontal_separator;
-
- if (gtk_tree_view_is_expander_column (tree_view, column))
- {
- padding += (tree_view->priv->deepest_depth - 1) * tree_view->priv->level_indentation;
-
- if (gtk_tree_view_draw_expanders (tree_view))
- padding += tree_view->priv->deepest_depth * tree_view->priv->expander_size;
- }
-
- if (tree_view->priv->grid_lines == GTK_TREE_VIEW_GRID_LINES_VERTICAL ||
- tree_view->priv->grid_lines == GTK_TREE_VIEW_GRID_LINES_BOTH)
- {
- if (gtk_tree_view_column_is_edge (tree_view, column))
- padding += grid_line_width / 2.0;
- else
- padding += grid_line_width;
- }
-
- return padding;
-}
-
/* GtkWidget::size_allocate helper */
static void
gtk_tree_view_size_allocate_columns (GtkWidget *widget,
@@ -2681,7 +2628,6 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget,
list != (rtl ? first_column->prev : last_column->next);
list = (rtl ? list->prev : list->next))
{
- gint column_cell_width = 0;
gint old_width, column_width;
column = list->data;
@@ -2737,13 +2683,7 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget,
if (extra_for_last > 0 && list == last_column)
column_width += extra_for_last;
- /* Remove any padding that we add to the column around the cell area
- * and give the correct internal cell area to the column.
- */
- column_cell_width =
- column_width - gtk_tree_view_get_column_padding (tree_view, column);
-
- _gtk_tree_view_column_allocate (column, width, column_width, column_cell_width);
+ _gtk_tree_view_column_allocate (column, width, column_width);
width += column_width;
@@ -3187,7 +3127,10 @@ gtk_tree_view_button_press (GtkWidget *widget,
if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
tree_view->priv->shift_pressed = TRUE;
+
+ /* This needs an x and a y ! */
focus_cell = _gtk_tree_view_column_get_cell_at_pos (column, event->x - background_area.x);
+
if (focus_cell)
gtk_tree_view_column_focus_cell (column, focus_cell);
@@ -6178,8 +6121,10 @@ validate_row (GtkTreeView *tree_view,
for (list = tree_view->priv->columns; list; list = list->next)
{
- gint tmp_width;
- gint tmp_height;
+ gint padding = 0;
+ gint original_width;
+ gint new_width;
+ gint row_height;
column = list->data;
@@ -6190,17 +6135,19 @@ validate_row (GtkTreeView *tree_view,
!_gtk_tree_view_column_cell_get_dirty (column))
continue;
+ original_width = _gtk_tree_view_column_get_requested_width (column);
+
gtk_tree_view_column_cell_set_cell_data (column, tree_view->priv->model, iter,
GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
node->children?TRUE:FALSE);
gtk_tree_view_column_cell_get_size (column,
NULL, NULL, NULL,
- &tmp_width, &tmp_height);
+ NULL, &row_height);
if (!is_separator)
{
- tmp_height += vertical_separator;
- height = MAX (height, tmp_height);
+ padding += vertical_separator;
+ height = MAX (height, row_height);
height = MAX (height, tree_view->priv->expander_size);
}
else
@@ -6213,27 +6160,28 @@ validate_row (GtkTreeView *tree_view,
if (gtk_tree_view_is_expander_column (tree_view, column))
{
- tmp_width = tmp_width + horizontal_separator + (depth - 1) * tree_view->priv->level_indentation;
+ padding += horizontal_separator + (depth - 1) * tree_view->priv->level_indentation;
if (gtk_tree_view_draw_expanders (tree_view))
- tmp_width += depth * tree_view->priv->expander_size;
+ padding += depth * tree_view->priv->expander_size;
}
else
- tmp_width = tmp_width + horizontal_separator;
+ padding += horizontal_separator;
if (draw_vgrid_lines)
{
if (list->data == first_column || list->data == last_column)
- tmp_width += grid_line_width / 2.0;
+ padding += grid_line_width / 2.0;
else
- tmp_width += grid_line_width;
+ padding += grid_line_width;
}
- if (tmp_width > _gtk_tree_view_column_get_requested_width (column))
- {
- retval = TRUE;
- _gtk_tree_view_column_set_requested_width (column, tmp_width);
- }
+ /* Update the padding for the column */
+ _gtk_tree_view_column_push_padding (column, padding);
+ new_width = _gtk_tree_view_column_get_requested_width (column);
+
+ if (new_width > original_width)
+ retval = TRUE;
}
if (draw_hgrid_lines)
@@ -12789,10 +12737,6 @@ gtk_tree_view_real_expand_row (GtkTreeView *tree_view,
gtk_tree_path_get_depth (path) + 1,
open_all);
- /* Update the deepest expanded row depth */
- if (tree_view->priv->deepest_depth < gtk_tree_path_get_depth (path) + 1)
- tree_view->priv->deepest_depth = gtk_tree_path_get_depth (path) + 1;
-
remove_expand_collapse_timeout (tree_view);
if (animate)
@@ -12847,17 +12791,6 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view,
return FALSE;
}
-static void
-gtk_tree_view_deepest_expanded_depth (GtkTreeView *tree_view,
- GtkTreePath *path,
- gint *deepest)
-{
- gint children_depth = gtk_tree_path_get_depth (path) + 1;
-
- if (children_depth > *deepest)
- *deepest = children_depth;
-}
-
static gboolean
gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
GtkTreePath *path,
@@ -13010,17 +12943,6 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
}
}
- /* If we're collapsing one of the deepest expanded rows,
- * we need to recalculate the deepest_depth
- */
- if (tree_view->priv->deepest_depth == gtk_tree_path_get_depth (path) + 1)
- {
- tree_view->priv->deepest_depth = 1;
- gtk_tree_view_map_expanded_rows (tree_view,
- (GtkTreeViewMappingFunc)gtk_tree_view_deepest_expanded_depth,
- &tree_view->priv->deepest_depth);
- }
-
return TRUE;
}
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index 429ed577fb..7a8bb7367d 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -136,7 +136,7 @@ struct _GtkTreeViewColumnPrivate
/* Sizing fields */
/* see gtk+/doc/tree-column-sizing.txt for more information on them */
GtkTreeViewColumnSizing column_type;
- gint requested_width;
+ gint padding;
gint resized_width;
gint width;
gint fixed_width;
@@ -451,7 +451,7 @@ gtk_tree_view_column_init (GtkTreeViewColumn *tree_column)
priv->button = NULL;
priv->xalign = 0.0;
priv->width = 0;
- priv->requested_width = -1;
+ priv->padding = -1;
priv->min_width = -1;
priv->max_width = -1;
priv->resized_width = 0;
@@ -1903,16 +1903,6 @@ gtk_tree_view_column_set_sizing (GtkTreeViewColumn *tree_column,
if (type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
gtk_tree_view_column_set_resizable (tree_column, FALSE);
-#if 0
- /* I was clearly on crack when I wrote this. I'm not sure what's supposed to
- * be below so I'll leave it until I figure it out.
- */
- if (priv->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE &&
- priv->requested_width != -1)
- {
- gtk_tree_view_column_set_sizing (tree_column, priv->requested_width);
- }
-#endif
priv->column_type = type;
gtk_tree_view_column_update_button (tree_column);
@@ -1971,13 +1961,22 @@ _gtk_tree_view_column_request_width (GtkTreeViewColumn *tree_column)
else if (gtk_tree_view_get_headers_visible (GTK_TREE_VIEW (priv->tree_view)))
{
gint button_request;
+ gint requested_width;
+
+ gtk_cell_area_context_get_preferred_width (priv->cell_area_context, &requested_width, NULL);
+ requested_width += priv->padding;
gtk_widget_get_preferred_width (priv->button, &button_request, NULL);
- real_requested_width = MAX (priv->requested_width, button_request);
+ real_requested_width = MAX (requested_width, button_request);
}
else
{
- real_requested_width = priv->requested_width;
+ gint requested_width;
+
+ gtk_cell_area_context_get_preferred_width (priv->cell_area_context, &requested_width, NULL);
+ requested_width += priv->padding;
+
+ real_requested_width = requested_width;
if (real_requested_width < 0)
real_requested_width = 0;
}
@@ -1994,8 +1993,7 @@ _gtk_tree_view_column_request_width (GtkTreeViewColumn *tree_column)
void
_gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column,
int x_offset,
- int width,
- int cell_width)
+ int width)
{
GtkTreeViewColumnPrivate *priv;
GtkAllocation allocation;
@@ -2007,7 +2005,7 @@ _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column,
priv->width = width;
- gtk_cell_area_context_allocate (priv->cell_area_context, cell_width, -1);
+ gtk_cell_area_context_allocate (priv->cell_area_context, priv->width - priv->padding, -1);
allocation.x = x_offset;
allocation.y = 0;
@@ -2891,7 +2889,7 @@ _gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
GtkTreeViewColumnPrivate *priv = tree_column->priv;
priv->dirty = TRUE;
- priv->requested_width = -1;
+ priv->padding = 0;
priv->width = 0;
if (priv->tree_view &&
@@ -3017,18 +3015,23 @@ _gtk_tree_view_column_get_window (GtkTreeViewColumn *column)
}
void
-_gtk_tree_view_column_set_requested_width (GtkTreeViewColumn *column,
- gint width)
+_gtk_tree_view_column_push_padding (GtkTreeViewColumn *column,
+ gint padding)
{
- column->priv->requested_width = width;
+ column->priv->padding = MAX (column->priv->padding, padding);
}
gint
_gtk_tree_view_column_get_requested_width (GtkTreeViewColumn *column)
{
- return column->priv->requested_width;
+ gint requested_width;
+
+ gtk_cell_area_context_get_preferred_width (column->priv->cell_area_context, &requested_width, NULL);
+
+ return requested_width + column->priv->padding;
}
+
void
_gtk_tree_view_column_set_resized_width (GtkTreeViewColumn *column,
gint width)