summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2012-12-06 22:28:11 +0100
committerAlexander Larsson <alexl@redhat.com>2012-12-06 22:28:11 +0100
commit4ca293e006a00ce8529e17d9202faaf68f57ff6f (patch)
tree4cd4ea50ad8fc95462006737f208ea6e942a3afe
parentfd964ca178105626b9945995b22c2dabe6ebe853 (diff)
downloadgtk+-4ca293e006a00ce8529e17d9202faaf68f57ff6f.tar.gz
treeview: Don't invalidate whole tree unless needed
We currently invalidate the whole tree every time the style state changes in the tree view. The primary reason for this is to catch default font changes as that may affect text cell renderers. But cell renderers could *potentially* also read other style properties (although that seems weird and unlikely). We handle this by invalidating only when some state that affects sizes is changed. This includes all the font properties.
-rw-r--r--gtk/gtktreeview.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index d651bd62b2..c422172d81 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -8461,6 +8461,8 @@ gtk_tree_view_style_updated (GtkWidget *widget)
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
GList *list;
GtkTreeViewColumn *column;
+ GtkStyleContext *style_context;
+ const GtkBitmask *changes;
GTK_WIDGET_CLASS (gtk_tree_view_parent_class)->style_updated (widget);
@@ -8472,16 +8474,19 @@ gtk_tree_view_style_updated (GtkWidget *widget)
gtk_tree_view_set_enable_tree_lines (tree_view, tree_view->priv->tree_lines_enabled);
}
- for (list = tree_view->priv->columns; list; list = list->next)
+ style_context = gtk_widget_get_style_context (widget);
+ changes = _gtk_style_context_get_changes (style_context);
+ if (changes == NULL || _gtk_css_style_property_changes_affect_size (changes))
{
- column = list->data;
- _gtk_tree_view_column_cell_set_dirty (column, TRUE);
- }
-
- tree_view->priv->fixed_height = -1;
- _gtk_rbtree_mark_invalid (tree_view->priv->tree);
+ for (list = tree_view->priv->columns; list; list = list->next)
+ {
+ column = list->data;
+ _gtk_tree_view_column_cell_set_dirty (column, TRUE);
+ }
- gtk_widget_queue_resize (widget);
+ tree_view->priv->fixed_height = -1;
+ _gtk_rbtree_mark_invalid (tree_view->priv->tree);
+ }
}