Bug #588398 - Leak with testgtk::preview_(color|gray) and more
Revert to gdk_win32_ref_cairo_surface() implementation from gtk-2-16 and make _gdk_windowing_create_cairo_surface() simply delegate to it.
This commit is contained in:
@ -1883,10 +1883,8 @@ _gdk_windowing_create_cairo_surface (GdkDrawable *drawable,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
HDC hdc = _gdk_win32_drawable_acquire_dc (drawable);
|
/* width and height are determined from the DC */
|
||||||
if (!hdc)
|
return gdk_win32_ref_cairo_surface (drawable);
|
||||||
return NULL;
|
|
||||||
return cairo_win32_surface_create (hdc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1909,16 +1907,17 @@ gdk_win32_ref_cairo_surface (GdkDrawable *drawable)
|
|||||||
|
|
||||||
if (!impl->cairo_surface)
|
if (!impl->cairo_surface)
|
||||||
{
|
{
|
||||||
// On Win32 cairo surface, width and height are determined from the DC
|
HDC hdc = _gdk_win32_drawable_acquire_dc (drawable);
|
||||||
impl->cairo_surface = _gdk_windowing_create_cairo_surface (drawable, 0, 0);
|
if (!hdc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
impl->cairo_surface = cairo_win32_surface_create (hdc);
|
||||||
|
|
||||||
cairo_surface_set_user_data (impl->cairo_surface, &gdk_win32_cairo_key,
|
cairo_surface_set_user_data (impl->cairo_surface, &gdk_win32_cairo_key,
|
||||||
drawable, gdk_win32_cairo_surface_destroy);
|
drawable, gdk_win32_cairo_surface_destroy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
cairo_surface_reference (impl->cairo_surface);
|
cairo_surface_reference (impl->cairo_surface);
|
||||||
}
|
|
||||||
|
|
||||||
return impl->cairo_surface;
|
return impl->cairo_surface;
|
||||||
}
|
}
|
||||||
@ -1977,6 +1976,6 @@ _gdk_win32_drawable_finish (GdkDrawable *drawable)
|
|||||||
cairo_surface_set_user_data (impl->cairo_surface, &gdk_win32_cairo_key, NULL, NULL);
|
cairo_surface_set_user_data (impl->cairo_surface, &gdk_win32_cairo_key, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO_CSW: g_assert (impl->hdc_count == 0);
|
g_assert (impl->hdc_count == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user