Move common gdkwindow.c code into function gdk_window_drop_cairo_surface
This code is duplicated in several places, and more to come, so put it all in one place.
This commit is contained in:
@ -276,6 +276,7 @@ static cairo_surface_t *gdk_window_ref_cairo_surface (GdkDrawable *drawable);
|
|||||||
static cairo_surface_t *gdk_window_create_cairo_surface (GdkDrawable *drawable,
|
static cairo_surface_t *gdk_window_create_cairo_surface (GdkDrawable *drawable,
|
||||||
int width,
|
int width,
|
||||||
int height);
|
int height);
|
||||||
|
static void gdk_window_drop_cairo_surface (GdkWindowObject *private);
|
||||||
static void gdk_window_set_cairo_clip (GdkDrawable *drawable,
|
static void gdk_window_set_cairo_clip (GdkDrawable *drawable,
|
||||||
cairo_t *cr);
|
cairo_t *cr);
|
||||||
|
|
||||||
@ -1596,14 +1597,9 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
if (is_parent_of (window, new_parent))
|
if (is_parent_of (window, new_parent))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (private->cairo_surface)
|
/* This might be wrong in the new parent, e.g. for non-native surfaces.
|
||||||
{
|
To make sure we're ok, just wipe it. */
|
||||||
/* This might be wrong in the new parent, e.g. for non-native surfaces.
|
gdk_window_drop_cairo_surface (private);
|
||||||
To make sure we're ok, just wipe it. */
|
|
||||||
cairo_surface_finish (private->cairo_surface);
|
|
||||||
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
|
|
||||||
NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
||||||
old_parent = private->parent;
|
old_parent = private->parent;
|
||||||
@ -2063,13 +2059,7 @@ _gdk_window_destroy_hierarchy (GdkWindow *window,
|
|||||||
|
|
||||||
_gdk_window_clear_update_area (window);
|
_gdk_window_clear_update_area (window);
|
||||||
|
|
||||||
if (private->cairo_surface)
|
gdk_window_drop_cairo_surface (private);
|
||||||
{
|
|
||||||
cairo_surface_finish (private->cairo_surface);
|
|
||||||
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
|
|
||||||
NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
||||||
|
|
||||||
@ -4843,6 +4833,17 @@ gdk_window_copy_to_image (GdkDrawable *drawable,
|
|||||||
width, height);
|
width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gdk_window_drop_cairo_surface (GdkWindowObject *private)
|
||||||
|
{
|
||||||
|
if (private->cairo_surface)
|
||||||
|
{
|
||||||
|
cairo_surface_finish (private->cairo_surface);
|
||||||
|
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_window_cairo_surface_destroy (void *data)
|
gdk_window_cairo_surface_destroy (void *data)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user