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;
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);
}
return (column == first_column || column == last_column);
}
-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;
-}
-
/* 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 */
gint padding;
gint grid_line_width;
gint horizontal_separator;
- gint depth = 1;
/* Get the deepest depth */
- gtk_tree_view_map_expanded_rows (tree_view,
- (GtkTreeViewMappingFunc)gtk_tree_view_deepest_expanded_depth,
- &depth);
gtk_widget_style_get (GTK_WIDGET (tree_view),
"horizontal-separator", &horizontal_separator,
"grid-line-width", &grid_line_width,
NULL);
- padding = horizontal_separator + (depth - 1) * tree_view->priv->level_indentation;
+ padding = horizontal_separator + (tree_view->priv->deepest_depth - 1) * tree_view->priv->level_indentation;
if (TREE_VIEW_DRAW_EXPANDERS (tree_view))
- padding += depth * tree_view->priv->expander_size;
+ 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)
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)
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,
}
g_signal_emit (tree_view, tree_view_signals[ROW_COLLAPSED], 0, &iter, path);
-
+
if (gtk_widget_get_mapped (GTK_WIDGET (tree_view)))
{
/* now that we've collapsed all rows, we want to try to set the prelight
}
}
+ /* 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;
}