mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 21:51:08 +00:00
gdk: Fix invalidation w/ pixel cache when changing child window geometry.
When moving/scrolling a child window we can't use the current clip region to limit what is invalidated, because there may be a pixel cache that listens for changes outside the clip region. Instead invalidate the entire area and rely on the invalidation code to limit the repaint to the actually visible area.
This commit is contained in:
parent
a0d9728e6c
commit
09a181d205
@ -5761,11 +5761,16 @@ gdk_window_move_resize_internal (GdkWindow *window,
|
||||
if (gdk_window_is_viewable (window) &&
|
||||
!window->input_only)
|
||||
{
|
||||
GdkRectangle r;
|
||||
|
||||
expose = TRUE;
|
||||
|
||||
old_region = cairo_region_copy (window->clip_region);
|
||||
/* Adjust regions to parent window coords */
|
||||
cairo_region_translate (old_region, window->x, window->y);
|
||||
r.x = window->x;
|
||||
r.y = window->y;
|
||||
r.width = window->width;
|
||||
r.height = window->height;
|
||||
|
||||
old_region = cairo_region_create_rectangle (&r);
|
||||
}
|
||||
|
||||
/* Set the new position and size */
|
||||
@ -5801,9 +5806,14 @@ gdk_window_move_resize_internal (GdkWindow *window,
|
||||
|
||||
if (expose)
|
||||
{
|
||||
new_region = cairo_region_copy (window->clip_region);
|
||||
/* Adjust region to parent window coords */
|
||||
cairo_region_translate (new_region, window->x, window->y);
|
||||
GdkRectangle r;
|
||||
|
||||
r.x = window->x;
|
||||
r.y = window->y;
|
||||
r.width = window->width;
|
||||
r.height = window->height;
|
||||
|
||||
new_region = cairo_region_create_rectangle (&r);
|
||||
|
||||
cairo_region_union (new_region, old_region);
|
||||
|
||||
@ -5940,7 +5950,7 @@ gdk_window_scroll (GdkWindow *window,
|
||||
|
||||
move_native_children (window);
|
||||
|
||||
gdk_window_invalidate_region_full (window, window->clip_region, TRUE);
|
||||
gdk_window_invalidate_rect_full (window, NULL, TRUE);
|
||||
|
||||
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user