Commit 040a2090 authored by Alexander Larsson's avatar Alexander Larsson Committed by Matthias Clasen

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.
parent 2e09bddb
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment