[gtk+] gdk: Fix invalidation w/ pixel cache when changing child window geometry.
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gdk: Fix invalidation w/ pixel cache when changing child window geometry.
- Date: Mon, 9 Nov 2015 16:11:45 +0000 (UTC)
commit 09a181d205b6d19054361b5a0d65cc877aebc191
Author: Alexander Larsson <alexl redhat com>
Date: Mon Nov 9 15:14:57 2015 +0100
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.
gdk/gdkwindow.c | 24 +++++++++++++++++-------
1 files changed, 17 insertions(+), 7 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 9206ead..7e2dfb7 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -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);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]