GdkWindowX11: Keep the impl window cairo surface around until destroy
We used to have a weak ref to the cairo surface and it was keep
alive by the references in the normal windows, but that reference
was removed by d48adf9cee, causing
us to constantly create and destroy the surface.
https://bugzilla.gnome.org/show_bug.cgi?id=738648
This commit is contained in:
@ -180,8 +180,6 @@ _gdk_x11_window_get_toplevel (GdkWindow *window)
|
||||
return impl->toplevel;
|
||||
}
|
||||
|
||||
static const cairo_user_data_key_t gdk_x11_cairo_key;
|
||||
|
||||
/**
|
||||
* _gdk_x11_window_update_size:
|
||||
* @impl: a #GdkWindowImplX11.
|
||||
@ -441,14 +439,6 @@ gdk_x11_window_end_frame (GdkWindow *window)
|
||||
* X11 specific implementations of generic functions *
|
||||
*****************************************************/
|
||||
|
||||
static void
|
||||
gdk_x11_cairo_surface_destroy (void *data)
|
||||
{
|
||||
GdkWindowImplX11 *impl = data;
|
||||
|
||||
impl->cairo_surface = NULL;
|
||||
}
|
||||
|
||||
static cairo_surface_t *
|
||||
gdk_x11_create_cairo_surface (GdkWindowImplX11 *impl,
|
||||
int width,
|
||||
@ -480,14 +470,10 @@ gdk_x11_ref_cairo_surface (GdkWindow *window)
|
||||
cairo_surface_set_device_scale (impl->cairo_surface, impl->window_scale, impl->window_scale);
|
||||
#endif
|
||||
|
||||
if (impl->cairo_surface)
|
||||
cairo_surface_set_user_data (impl->cairo_surface, &gdk_x11_cairo_key,
|
||||
impl, gdk_x11_cairo_surface_destroy);
|
||||
|
||||
if (WINDOW_IS_TOPLEVEL (window) && impl->toplevel->in_frame)
|
||||
hook_surface_changed (window);
|
||||
}
|
||||
else
|
||||
|
||||
cairo_surface_reference (impl->cairo_surface);
|
||||
|
||||
return impl->cairo_surface;
|
||||
@ -1318,8 +1304,8 @@ gdk_x11_window_destroy (GdkWindow *window,
|
||||
if (impl->cairo_surface)
|
||||
{
|
||||
cairo_surface_finish (impl->cairo_surface);
|
||||
cairo_surface_set_user_data (impl->cairo_surface, &gdk_x11_cairo_key,
|
||||
NULL, NULL);
|
||||
cairo_surface_destroy (impl->cairo_surface);
|
||||
impl->cairo_surface = NULL;
|
||||
}
|
||||
|
||||
if (!recursing && !foreign_destroy)
|
||||
|
||||
Reference in New Issue
Block a user