diff options
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/textuno.hxx | 8 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLTableHeaderFooterContext.cxx | 3 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLTableMasterPageExport.cxx | 15 | ||||
-rw-r--r-- | sc/source/ui/unoobj/textuno.cxx | 7 |
4 files changed, 32 insertions, 1 deletions
diff --git a/sc/inc/textuno.hxx b/sc/inc/textuno.hxx index 9a641572d4ff..defb6d656abd 100644 --- a/sc/inc/textuno.hxx +++ b/sc/inc/textuno.hxx @@ -102,6 +102,8 @@ public: throw(css::uno::RuntimeException, std::exception) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(css::uno::RuntimeException, std::exception) override; + + virtual void dispose(); }; // ScHeaderFooterTextData: shared data between sub objects of a ScHeaderFooterTextObj @@ -130,7 +132,9 @@ public: sal_uInt16 GetPart() const { return nPart; } rtl::Reference<ScHeaderFooterContentObj> GetContentObj() const { return rContentObj; } - const EditTextObject* GetTextObject() const { return mpTextObj;} + const EditTextObject* GetTextObject() const { return mpTextObj; } + + void dispose() { rContentObj.clear(); } }; /** @@ -224,6 +228,8 @@ public: throw(css::uno::RuntimeException, std::exception) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(css::uno::RuntimeException, std::exception) override; + + virtual void dispose() { aTextData.dispose(); } }; // derived cursor objects for getImplementation and getText/getStart/getEnd diff --git a/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx b/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx index ba0e16e98104..2ba8ed048153 100644 --- a/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx +++ b/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx @@ -25,6 +25,7 @@ #include <comphelper/extract.hxx> #include "unonames.hxx" +#include "textuno.hxx" using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -99,6 +100,8 @@ XMLTableHeaderFooterContext::XMLTableHeaderFooterContext( SvXMLImport& rImport, XMLTableHeaderFooterContext::~XMLTableHeaderFooterContext() { + rtl::Reference<ScHeaderFooterContentObj> pImp = ScHeaderFooterContentObj::getImplementation( xHeaderFooterContent ); + pImp->dispose(); } SvXMLImportContext *XMLTableHeaderFooterContext::CreateChildContext( diff --git a/sc/source/filter/xml/XMLTableMasterPageExport.cxx b/sc/source/filter/xml/XMLTableMasterPageExport.cxx index 260deea6dffe..f9e42add00bd 100644 --- a/sc/source/filter/xml/XMLTableMasterPageExport.cxx +++ b/sc/source/filter/xml/XMLTableMasterPageExport.cxx @@ -23,9 +23,11 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include "XMLTableMasterPageExport.hxx" #include <comphelper/extract.hxx> +#include <rtl/ref.hxx> #include "unonames.hxx" #include "xmlexprt.hxx" +#include "textuno.hxx" using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -105,6 +107,14 @@ void XMLTableMasterPageExport::exportHeaderFooter(const css::uno::Reference < cs } } +void lcl_DisposeXHeaderFooterContent( Reference < sheet::XHeaderFooterContent > xHFContent ) +{ + if( !xHFContent.is() ) + return; + rtl::Reference<ScHeaderFooterContentObj> pImp = ScHeaderFooterContentObj::getImplementation( xHFContent ); + pImp->dispose(); +} + void XMLTableMasterPageExport::exportMasterPageContent( const Reference < XPropertySet > & rPropSet, bool bAutoStyles ) @@ -162,6 +172,11 @@ void XMLTableMasterPageExport::exportMasterPageContent( exportHeaderFooter( xFooterLeft, XML_FOOTER_LEFT, bLeftFooter ); } + + lcl_DisposeXHeaderFooterContent( xHeader ); + lcl_DisposeXHeaderFooterContent( xHeaderLeft ); + lcl_DisposeXHeaderFooterContent( xFooter ); + lcl_DisposeXHeaderFooterContent( xFooterLeft ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx index 736e96140b3f..1ea1215b1859 100644 --- a/sc/source/ui/unoobj/textuno.cxx +++ b/sc/source/ui/unoobj/textuno.cxx @@ -174,6 +174,13 @@ rtl::Reference<ScHeaderFooterContentObj> ScHeaderFooterContentObj::getImplementa return pRet; } +void ScHeaderFooterContentObj::dispose() +{ + mxLeftText->dispose(); + mxCenterText->dispose(); + mxRightText->dispose(); +} + ScHeaderFooterTextData::ScHeaderFooterTextData( rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj) : mpTextObj(pTextObj ? pTextObj->Clone() : nullptr), |