diff --git a/src/wxxt/src/DeviceContexts/WindowDC.cc b/src/wxxt/src/DeviceContexts/WindowDC.cc index 4945605d65..eac2053b55 100644 --- a/src/wxxt/src/DeviceContexts/WindowDC.cc +++ b/src/wxxt/src/DeviceContexts/WindowDC.cc @@ -2867,6 +2867,10 @@ void wxWindowDC::Initialize(wxWindowDC_Xinit* init) void wxWindowDC::Destroy(void) { +#ifdef WX_USE_CAIRO + ReleaseCairoDev(); +#endif + if (PEN_GC) XFreeGC(DPY, PEN_GC); if (BRUSH_GC) XFreeGC(DPY, BRUSH_GC); if (TEXT_GC) XFreeGC(DPY, TEXT_GC); @@ -3726,7 +3730,7 @@ void wxWindowDC::InitCairoDev() void wxWindowDC::ReleaseCairoDev() { if (X->cairo_dev) { - cairo_destroy(CAIRO_DEV); + cairo_destroy_it(CAIRO_DEV); X->cairo_dev = 0; } } diff --git a/src/wxxt/src/wx_cairo.h b/src/wxxt/src/wx_cairo.h index 776b2a75fa..c90dd6a213 100644 --- a/src/wxxt/src/wx_cairo.h +++ b/src/wxxt/src/wx_cairo.h @@ -24,6 +24,7 @@ typedef cairo_matrix_t cairo_matrix_p; # define cairo_default_matrix(dev) cairo_identity_matrix(dev) # undef cairo_init_clip # define cairo_init_clip(dev) cairo_reset_clip(dev) +# define cairo_destroy_it(c) (cairo_surface_destroy(cairo_get_target(c)), cairo_destroy(c)) # else /* Old Cairo API (0.5 and up) */ typedef cairo_matrix_t *cairo_matrix_p; @@ -31,5 +32,6 @@ typedef cairo_matrix_t *cairo_matrix_p; # define cairo__set_matrix(CAIRO_DEV, m) cairo_set_matrix(CAIRO_DEV, m) # define cairo_set_create_xlib(dev, display, drawable, vis, w, h) \ dev = cairo_create(); cairo_set_target_drawable(dev, wxAPP_DISPLAY, DRAWABLE) +# define cairo_destroy_it(c) cairo_destroy(c) # endif #endif