diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index 9ff1d9277a..694391d83c 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -511,9 +511,9 @@ void _gdk_display_pointer_info_foreach (GdkDisplay *display, void _gdk_window_invalidate_for_expose (GdkWindow *window, cairo_region_t *region); -void _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, - int width, - int height); +gboolean _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, + int width, + int height); cairo_surface_t * _gdk_windowing_create_cairo_surface (GdkDrawable *drawable, int width, diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 5797591b38..89f8bd7d79 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1054,11 +1054,18 @@ recompute_visible_regions_internal (GdkWindowObject *private, width = private->abs_x + private->width; height = private->abs_y + private->height; - _gdk_windowing_set_cairo_surface_size (private->cairo_surface, - width, height); - cairo_surface_set_device_offset (private->cairo_surface, - private->abs_x, - private->abs_y); + if (_gdk_windowing_set_cairo_surface_size (private->cairo_surface, + width, height)) + { + cairo_surface_set_device_offset (private->cairo_surface, + private->abs_x, + private->abs_y); + } + else + { + cairo_surface_destroy (private->cairo_surface); + private->cairo_surface = NULL; + } } } diff --git a/gdk/quartz/gdkdrawable-quartz.c b/gdk/quartz/gdkdrawable-quartz.c index ddb481a389..849d186ac9 100644 --- a/gdk/quartz/gdkdrawable-quartz.c +++ b/gdk/quartz/gdkdrawable-quartz.c @@ -32,12 +32,13 @@ typedef struct { CGContextRef cg_context; } GdkQuartzCairoSurfaceData; -void +gboolean _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, int width, int height) { /* This is not supported with quartz surfaces. */ + return FALSE; } static void diff --git a/gdk/win32/gdkdrawable-win32.c b/gdk/win32/gdkdrawable-win32.c index 17ccd615a6..403ffad12b 100644 --- a/gdk/win32/gdkdrawable-win32.c +++ b/gdk/win32/gdkdrawable-win32.c @@ -670,12 +670,13 @@ gdk_win32_ref_cairo_surface (GdkDrawable *drawable) return impl->cairo_surface; } -void +gboolean _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, gint width, gint height) { // Do nothing. The surface size is determined by the DC + return FALSE; } static gint diff --git a/gdk/x11/gdkdrawable-x11.c b/gdk/x11/gdkdrawable-x11.c index 02efc0d840..961dad01ab 100644 --- a/gdk/x11/gdkdrawable-x11.c +++ b/gdk/x11/gdkdrawable-x11.c @@ -461,12 +461,13 @@ gdk_x11_cairo_surface_destroy (void *data) impl->cairo_surface = NULL; } -void +gboolean _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, int width, int height) { cairo_xlib_surface_set_size (surface, width, height); + return TRUE; } cairo_surface_t *