diff options
author | Michael Stahl <mstahl@redhat.com> | 2012-09-04 20:38:17 +0200 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2012-09-05 10:33:38 +0200 |
commit | 0e6054f8f5e2d41e50a50645defa5861599fe375 (patch) | |
tree | a0cd433cfa47f377045f27f8855d086ef215e375 /reportdesign/source/core/api/Section.cxx | |
parent | 6781ee7039adc7248d887589b1369dda4dc45791 (diff) |
fdo#53872: reportdesign: fix section drawpage crash:
In order to wrap the SdrPage's UNO object completely, set its mxUnoPage
member to the OSection wrapper instance in OSection::init; only OSection
should have access to it.
Also initialize m_xDrawPage_Tunnel (thanks Lionel for the hint).
(regression from 05218c101df486302bf4cfe8be23ad840daa3f73)
Change-Id: I048ddafc31e946853e56e6a403ddc9487cfbcf0e
Signed-off-by: Lionel Elie Mamane <lionel@mamane.lu>
Diffstat (limited to 'reportdesign/source/core/api/Section.cxx')
-rw-r--r-- | reportdesign/source/core/api/Section.cxx | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/reportdesign/source/core/api/Section.cxx b/reportdesign/source/core/api/Section.cxx index 8142bef0a10c..d498cdae6cc0 100644 --- a/reportdesign/source/core/api/Section.cxx +++ b/reportdesign/source/core/api/Section.cxx @@ -165,6 +165,12 @@ void SAL_CALL OSection::dispose() throw(uno::RuntimeException) { OSL_ENSURE(!rBHelper.bDisposed,"Already disposed!"); SectionPropertySet::dispose(); + uno::Reference<lang::XComponent> const xPageComponent(m_xDrawPage, + uno::UNO_QUERY); + if (xPageComponent.is()) + { + xPageComponent->dispose(); + } cppu::WeakComponentImplHelperBase::dispose(); } @@ -208,11 +214,15 @@ void OSection::init() if ( pModel ) { uno::Reference<report::XSection> const xSection(this); - m_xDrawPage.set(pModel->createNewPage(xSection)->getUnoPage(), - uno::UNO_QUERY_THROW); + SdrPage & rSdrPage(*pModel->createNewPage(xSection)); + m_xDrawPage.set(rSdrPage.getUnoPage(), uno::UNO_QUERY_THROW); m_xDrawPage_ShapeGrouper.set(m_xDrawPage, uno::UNO_QUERY_THROW); // apparently we may also get OReportDrawPage which doesn't support this m_xDrawPage_FormSupplier.set(m_xDrawPage, uno::UNO_QUERY); + m_xDrawPage_Tunnel.set(m_xDrawPage, uno::UNO_QUERY_THROW); + // fdo#53872: now also exchange the XDrawPage in the SdrPage so that + // rSdrPage.getUnoPage returns this + rSdrPage.SetUnoPage(this); // createNewPage _should_ have stored away 2 uno::References to this, // so our ref count cannot be 1 here, so this isn't destroyed here assert(m_refCount > 1); |