From: Paul Cornett Date: Tue, 3 Sep 2013 05:37:30 +0000 (+0000) Subject: Fix referencing of cairo_t returned from wxDCImpl::GetCairoContext(). X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/48829702f157f628beeda931b55a1b023afed326 Fix referencing of cairo_t returned from wxDCImpl::GetCairoContext(). It was assumed that all callers were going to unref the cairo_t, but that is not true, so callers that are going to unref it should ref it themselves. See #15455 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74746 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 1cf971d0e6..c89d338f51 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -1654,7 +1654,9 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC& #ifdef __WXGTK20__ const wxDCImpl *impl = dc.GetImpl(); - Init( (cairo_t*) impl->GetCairoContext() ); + cairo_t* cr = static_cast(impl->GetCairoContext()); + if (cr) + Init(cairo_reference(cr)); #endif wxSize sz = dc.GetSize(); m_width = sz.x; @@ -1700,7 +1702,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& #ifdef __WXGTK3__ cairo_t* cr = static_cast(dc.GetImpl()->GetCairoContext()); if (cr) - Init(cr); + Init(cairo_reference(cr)); #elif defined __WXGTK20__ wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl(); Init( gdk_cairo_create( impldc->GetGDKWindow() ) ); @@ -1775,7 +1777,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& #ifdef __WXGTK3__ cairo_t* cr = static_cast(dc.GetImpl()->GetCairoContext()); if (cr) - Init(cr); + Init(cairo_reference(cr)); #elif defined __WXGTK20__ wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl(); Init( gdk_cairo_create( impldc->GetGDKWindow() ) ); diff --git a/src/gtk/dc.cpp b/src/gtk/dc.cpp index 9814072bef..7640bf3c6e 100644 --- a/src/gtk/dc.cpp +++ b/src/gtk/dc.cpp @@ -181,8 +181,6 @@ void* wxGTKCairoDCImpl::GetCairoContext() const cairo_t* cr = NULL; if (m_graphicContext) cr = static_cast(m_graphicContext->GetNativeContext()); - if (cr) - cairo_reference(cr); return cr; } //----------------------------------------------------------------------------- diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp index beff9c1be2..d309ffd6ad 100644 --- a/src/gtk/print.cpp +++ b/src/gtk/print.cpp @@ -1209,7 +1209,7 @@ bool wxGtkPrinterDCImpl::IsOk() const void* wxGtkPrinterDCImpl::GetCairoContext() const { - return (void*) cairo_reference( m_cairo ); + return m_cairo; } void* wxGtkPrinterDCImpl::GetHandle() const