mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-17 23:10:22 +00:00
treeview: Invalidate on expander changes, don't just repaint
Repaints are supposed to be initiated by GDK, not by random repaints.
This commit is contained in:
parent
bc1cd6c5cb
commit
62f5fdc856
@ -324,8 +324,7 @@ static void gtk_tree_view_queue_draw_path (GtkTreeView
|
||||
const GdkRectangle *clip_rect);
|
||||
static void gtk_tree_view_queue_draw_arrow (GtkTreeView *tree_view,
|
||||
GtkRBTree *tree,
|
||||
GtkRBNode *node,
|
||||
const GdkRectangle *clip_rect);
|
||||
GtkRBNode *node);
|
||||
static void gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
|
||||
GtkRBTree *tree,
|
||||
GtkRBNode *node,
|
||||
@ -2612,11 +2611,9 @@ gtk_tree_view_button_press (GtkWidget *widget,
|
||||
gtk_grab_add (widget);
|
||||
tree_view->priv->button_pressed_node = tree_view->priv->prelight_node;
|
||||
tree_view->priv->button_pressed_tree = tree_view->priv->prelight_tree;
|
||||
gtk_tree_view_draw_arrow (GTK_TREE_VIEW (widget),
|
||||
tree_view->priv->prelight_tree,
|
||||
tree_view->priv->prelight_node,
|
||||
event->x,
|
||||
event->y);
|
||||
gtk_tree_view_queue_draw_arrow (GTK_TREE_VIEW (widget),
|
||||
tree_view->priv->prelight_tree,
|
||||
tree_view->priv->prelight_node);
|
||||
}
|
||||
|
||||
grab_focus_and_unset_draw_keyfocus (tree_view);
|
||||
@ -3223,7 +3220,7 @@ do_prelight (GtkTreeView *tree_view,
|
||||
GTK_TREE_VIEW_UNSET_FLAG (tree_view,
|
||||
GTK_TREE_VIEW_ARROW_PRELIT);
|
||||
|
||||
gtk_tree_view_draw_arrow (tree_view, tree, node, x, y);
|
||||
gtk_tree_view_queue_draw_arrow (tree_view, tree, node);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3242,11 +3239,9 @@ do_prelight (GtkTreeView *tree_view,
|
||||
{
|
||||
GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_ARROW_PRELIT);
|
||||
|
||||
gtk_tree_view_draw_arrow (tree_view,
|
||||
tree_view->priv->prelight_tree,
|
||||
tree_view->priv->prelight_node,
|
||||
x,
|
||||
y);
|
||||
gtk_tree_view_queue_draw_arrow (tree_view,
|
||||
tree_view->priv->prelight_tree,
|
||||
tree_view->priv->prelight_node);
|
||||
}
|
||||
|
||||
_gtk_tree_view_queue_draw_node (tree_view,
|
||||
@ -3273,7 +3268,7 @@ do_prelight (GtkTreeView *tree_view,
|
||||
{
|
||||
GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_ARROW_PRELIT);
|
||||
|
||||
gtk_tree_view_draw_arrow (tree_view, tree, node, x, y);
|
||||
gtk_tree_view_queue_draw_arrow (tree_view, tree, node);
|
||||
}
|
||||
|
||||
GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_PRELIT);
|
||||
@ -9450,8 +9445,7 @@ _gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
|
||||
static void
|
||||
gtk_tree_view_queue_draw_arrow (GtkTreeView *tree_view,
|
||||
GtkRBTree *tree,
|
||||
GtkRBNode *node,
|
||||
const GdkRectangle *clip_rect)
|
||||
GtkRBNode *node)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GdkRectangle rect;
|
||||
@ -9466,18 +9460,7 @@ gtk_tree_view_queue_draw_arrow (GtkTreeView *tree_view,
|
||||
rect.y = BACKGROUND_FIRST_PIXEL (tree_view, tree, node);
|
||||
rect.height = ROW_HEIGHT (tree_view, BACKGROUND_HEIGHT (node));
|
||||
|
||||
if (clip_rect)
|
||||
{
|
||||
GdkRectangle new_rect;
|
||||
|
||||
gdk_rectangle_intersect (clip_rect, &rect, &new_rect);
|
||||
|
||||
gdk_window_invalidate_rect (tree_view->priv->bin_window, &new_rect, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gdk_window_invalidate_rect (tree_view->priv->bin_window, &rect, TRUE);
|
||||
}
|
||||
gdk_window_invalidate_rect (tree_view->priv->bin_window, &rect, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
@ -12043,7 +12026,7 @@ do_expand_collapse (GtkTreeView *tree_view)
|
||||
|
||||
if (redraw)
|
||||
{
|
||||
gtk_tree_view_queue_draw_arrow (tree_view, tree, node, NULL);
|
||||
gtk_tree_view_queue_draw_arrow (tree_view, tree, node);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user