svx/source/svdraw/svdobj.cxx | 51 +++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 21 deletions(-)
New commits: commit 2c70acb6353e165bcf2bd3dd8553924307c88427 Author: Armin Le Grand <armin.le.gr...@cib.de> Date: Mon Apr 2 12:04:28 2018 +0200 SOSAW080: Reworked SvxShape to use SdrObject's SdrModel Change-Id: I17bcb44d2e29920c0c74430c2d9c703b36cfa0ad diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 4f480f4046aa..d1dc3a339ac0 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -347,22 +347,7 @@ SdrObject::~SdrObject() // when they get called from ObjectInDestruction(). mpImpl->maObjectUsers.clear(); - try - { - SvxShape* pSvxShape = getSvxShape(); - if ( pSvxShape ) - { - OSL_ENSURE(!pSvxShape->HasSdrObjectOwnership(),"Please check where this call come from and replace it with SdrObject::Free"); - pSvxShape->InvalidateSdrObject(); - uno::Reference< lang::XComponent > xShapeComp( getWeakUnoShape(), uno::UNO_QUERY_THROW ); - xShapeComp->dispose(); - } - } - catch( const uno::Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - + // UserCall SendUserCall(SdrUserCallType::Delete, GetLastBoundRect()); o3tl::reset_preserve_ptr_during(pPlusData); @@ -374,14 +359,38 @@ SdrObject::~SdrObject() void SdrObject::Free( SdrObject*& _rpObject ) { SdrObject* pObject = _rpObject; _rpObject = nullptr; - if ( pObject == nullptr ) + + if(nullptr == pObject) + { // nothing to do return; + } - SvxShape* pShape = pObject->getSvxShape(); - if ( pShape && pShape->HasSdrObjectOwnership() ) - // only the shape is allowed to delete me, and will reset the ownership before doing so - return; + SvxShape* pShape(pObject->getSvxShape()); + + if(pShape) + { + if(pShape->HasSdrObjectOwnership()) + { + // only the SvxShape is allowed to delete me, and will reset + // the ownership before doing so + return; + } + else + { + // not only delete pObject, but also need to dispose uno shape + try + { + pShape->InvalidateSdrObject(); + uno::Reference< lang::XComponent > xShapeComp( pObject->getWeakUnoShape(), uno::UNO_QUERY_THROW ); + xShapeComp->dispose(); + } + catch( const uno::Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + } delete pObject; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits