diff options
author | Noel <noel.grandin@collabora.co.uk> | 2021-03-05 10:47:16 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-03-07 13:24:51 +0100 |
commit | 1d2773807f6d2deb1181ef4b14fbdd49ca1d5c14 (patch) | |
tree | 788ef3ef220549c9785bcf1f5b35becc176300d4 /sw | |
parent | e4e80ed313882f9ea1b309054e5aa3e839586516 (diff) |
ref-count SdrPage
which simplifies ownership handling, particularly with regard to
undo/redo
Change-Id: Ie8f300ebfdae6db3c06f78a87e35a07497d6b825
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111991
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/dpage.hxx | 2 | ||||
-rw-r--r-- | sw/inc/drawdoc.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentDrawModelManager.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/doc/doclay.cxx | 5 | ||||
-rw-r--r-- | sw/source/core/draw/dpage.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/draw/drawdoc.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/frmedt/feshview.cxx | 5 |
7 files changed, 15 insertions, 13 deletions
diff --git a/sw/inc/dpage.hxx b/sw/inc/dpage.hxx index f144663ebac9..2f06a9c8d0fc 100644 --- a/sw/inc/dpage.hxx +++ b/sw/inc/dpage.hxx @@ -39,7 +39,7 @@ public: explicit SwDPage(SwDrawModel& rNewModel, bool bMasterPage); virtual ~SwDPage() override; - virtual SwDPage* CloneSdrPage(SdrModel& rTargetModel) const override; + virtual rtl::Reference<SdrPage> CloneSdrPage(SdrModel& rTargetModel) const override; // #i3694# // This GetOffset() method is not needed anymore, it even leads to errors. diff --git a/sw/inc/drawdoc.hxx b/sw/inc/drawdoc.hxx index 05762bb577ae..d80be90bc220 100644 --- a/sw/inc/drawdoc.hxx +++ b/sw/inc/drawdoc.hxx @@ -37,7 +37,7 @@ public: /// Put needed items for XPropertyList entries from the DrawModel. void PutAreaListItems(SfxItemSet& rSet) const; - virtual SdrPage* AllocPage(bool bMasterPage) override; + virtual rtl::Reference<SdrPage> AllocPage(bool bMasterPage) override; virtual css::uno::Reference<css::embed::XStorage> GetDocumentStorage() const override; diff --git a/sw/source/core/doc/DocumentDrawModelManager.cxx b/sw/source/core/doc/DocumentDrawModelManager.cxx index 947a7825ea27..c3f09b767eea 100644 --- a/sw/source/core/doc/DocumentDrawModelManager.cxx +++ b/sw/source/core/doc/DocumentDrawModelManager.cxx @@ -104,8 +104,8 @@ void DocumentDrawModelManager::InitDrawModel() mnInvisibleControls = mpDrawModel->GetLayerAdmin().NewLayer( sLayerNm )->GetID(); } - SdrPage* pMasterPage = mpDrawModel->AllocPage( false ); - mpDrawModel->InsertPage( pMasterPage ); + rtl::Reference<SdrPage> pMasterPage = mpDrawModel->AllocPage( false ); + mpDrawModel->InsertPage( pMasterPage.get() ); SAL_INFO( "sw.doc", "after create DrawDocument" ); SdrOutliner& rOutliner = mpDrawModel->GetDrawOutliner(); if (!utl::ConfigManager::IsFuzzing()) @@ -143,7 +143,7 @@ void DocumentDrawModelManager::InitDrawModel() // use pMasterPage instead of a new created SdrPage // mpDrawModel->AllocPage( FALSE ); // mpDrawModel->InsertPage( pDrawPage ); - SdrPage* pDrawPage = pMasterPage; + SdrPage* pDrawPage = pMasterPage.get(); pRoot->SetDrawPage( pDrawPage ); pDrawPage->SetSize( pRoot->getFrameArea().SSize() ); } diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx index bd0b40063a8e..c034a2b477a3 100644 --- a/sw/source/core/doc/doclay.cxx +++ b/sw/source/core/doc/doclay.cxx @@ -109,8 +109,9 @@ SdrObject* SwDoc::CloneSdrObj( const SdrObject& rObj, bool bMoveWithinDoc, SdrPage *pPg = getIDocumentDrawModelAccess().GetOrCreateDrawModel()->GetPage( 0 ); if( !pPg ) { - pPg = getIDocumentDrawModelAccess().GetDrawModel()->AllocPage( false ); - getIDocumentDrawModelAccess().GetDrawModel()->InsertPage( pPg ); + auto pNewPage = getIDocumentDrawModelAccess().GetDrawModel()->AllocPage( false ); + getIDocumentDrawModelAccess().GetDrawModel()->InsertPage( pNewPage.get() ); + pPg = pNewPage.get(); } // TTTT Clone directly to target SdrModel diff --git a/sw/source/core/draw/dpage.cxx b/sw/source/core/draw/dpage.cxx index 4601d8f2e7a6..63a7c9e8f0fc 100644 --- a/sw/source/core/draw/dpage.cxx +++ b/sw/source/core/draw/dpage.cxx @@ -66,10 +66,10 @@ void SwDPage::lateInit(const SwDPage& rSrcPage) } } -SwDPage* SwDPage::CloneSdrPage(SdrModel& rTargetModel) const +rtl::Reference<SdrPage> SwDPage::CloneSdrPage(SdrModel& rTargetModel) const { SwDrawModel& rSwDrawModel(static_cast< SwDrawModel& >(rTargetModel)); - SwDPage* pClonedSwDPage( + rtl::Reference<SwDPage> pClonedSwDPage( new SwDPage( rSwDrawModel, IsMasterPage())); diff --git a/sw/source/core/draw/drawdoc.cxx b/sw/source/core/draw/drawdoc.cxx index 401c9cf9c980..5735f36c83bb 100644 --- a/sw/source/core/draw/drawdoc.cxx +++ b/sw/source/core/draw/drawdoc.cxx @@ -93,9 +93,9 @@ SwDrawModel::~SwDrawModel() * * @return Pointer to the new page. */ -SdrPage* SwDrawModel::AllocPage(bool bMasterPage) +rtl::Reference<SdrPage> SwDrawModel::AllocPage(bool bMasterPage) { - SwDPage* pPage = new SwDPage(*this, bMasterPage); + rtl::Reference<SwDPage> pPage = new SwDPage(*this, bMasterPage); pPage->SetName("Controls"); return pPage; } diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index 691f60ca3592..c4145ddde43d 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -1992,8 +1992,9 @@ bool SwFEShell::ImpEndCreate() if( !pPg ) { SdrModel* pTmpSdrModel = getIDocumentDrawModelAccess().GetDrawModel(); - pPg = pTmpSdrModel->AllocPage( false ); - pTmpSdrModel->InsertPage( pPg ); + auto pNewPage = pTmpSdrModel->AllocPage( false ); + pTmpSdrModel->InsertPage( pNewPage.get() ); + pPg = pNewPage.get(); } pPg->RecalcObjOrdNums(); SdrObject* pRemovedObject = pPg->RemoveObject( rSdrObj.GetOrdNumDirect() ); |