From c34395247328528d5ad4d3994691ad642e3fe189 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 31 Aug 2012 09:47:50 +0200 Subject: [PATCH] Fix flickering regression on some systems For some reason the way we remove the "inner" area when clearing the background doesn't work on one computer. I don't really know why, but the current approach does seems a little fragile. This replaces it with a solid region operation that works on all my machines. https://bugs.freedesktop.org/show_bug.cgi?id=54277 --- gtk/spice-widget-cairo.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/gtk/spice-widget-cairo.c b/gtk/spice-widget-cairo.c index 069410a..b457f89 100644 --- a/gtk/spice-widget-cairo.c +++ b/gtk/spice-widget-cairo.c @@ -77,6 +77,8 @@ G_GNUC_INTERNAL void spicex_draw_event(SpiceDisplay *display, cairo_t *cr) { SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); + cairo_rectangle_int_t rect; + cairo_region_t *region; double s; int x, y; int ww, wh; @@ -87,16 +89,25 @@ void spicex_draw_event(SpiceDisplay *display, cairo_t *cr) gdk_drawable_get_size(gtk_widget_get_window(GTK_WIDGET(display)), &ww, &wh); /* We need to paint the bg color around the image */ - cairo_rectangle(cr, 0, 0, ww, wh); + rect.x = 0; + rect.y = 0; + rect.width = ww; + rect.height = wh; + region = cairo_region_create_rectangle(&rect); /* Optionally cut out the inner area where the pixmap will be drawn. This avoids 'flashing' since we're - not double-buffering. Note we're using the undocumented - behaviour of drawing the rectangle from right to left - to cut out the whole */ - if (d->ximage) - cairo_rectangle(cr, x + w, y, - -w, h); + not double-buffering. */ + if (d->ximage) { + rect.x = x; + rect.y = y; + rect.width = w; + rect.height = h; + cairo_region_subtract_rectangle(region, &rect); + } + + gdk_cairo_region (cr, region); + cairo_region_destroy (region); /* Need to set a real solid color, because the default is usually transparent these days, and non-double buffered windows can't -- 1.7.12