diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-04-17 09:26:55 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-04-20 09:50:44 +0200 |
commit | 9f0fdb491cb128d3a5afb9c1f5907dfc31f6b197 (patch) | |
tree | 9ecc6824a994962689eee751b7fa1f0d6b4c7c32 /filter | |
parent | 7b355669c6ddeab2e6cec692d6afdff41c61d0fb (diff) |
forcepoint#38 notify that obj in group was deleted
Change-Id: I4599a8e93eccb28c8a406418fd5c7c670b59c871
Reviewed-on: https://gerrit.libreoffice.org/53162
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/msfilter/msdffimp.cxx | 37 | ||||
-rw-r--r-- | filter/source/msfilter/svdfppt.cxx | 3 |
2 files changed, 37 insertions, 3 deletions
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 4eaf3205e437..6e1726c9785c 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -5028,8 +5028,34 @@ void SvxMSDffManager::GetGroupAnchors( const DffRecordHeader& rHd, SvStream& rSt } } -void SvxMSDffManager::FreeObj(void* /*pData*/, SdrObject* pObj) +SvxMSDffImportRec* SvxMSDffImportData::find(const SdrObject* pObj) { + for (const auto& it : *this) + { + if (it->pObj == pObj) + return it.get(); + } + return nullptr; +} + +void SvxMSDffManager::NotifyFreeObj(void* pData, SdrObject* pObj) +{ + if (SdrObjGroup* pGroup = dynamic_cast<SdrObjGroup*>(pObj)) + { + SdrObjList* pSubList = pGroup->GetSubList(); + size_t nObjCount = pSubList->GetObjCount(); + for (size_t i = 0; i < nObjCount; ++i) + NotifyFreeObj(pData, pSubList->GetObj(i)); + } + + SvxMSDffImportData& rImportData = *static_cast<SvxMSDffImportData*>(pData); + if (SvxMSDffImportRec* pRecord = rImportData.find(pObj)) + pRecord->pObj = nullptr; +} + +void SvxMSDffManager::FreeObj(void* pData, SdrObject* pObj) +{ + NotifyFreeObj(pData, pObj); SdrObject::Free(pObj); } @@ -7471,4 +7497,13 @@ SdrObject* SvxMSDffManager::getShapeForId( sal_Int32 nShapeId ) return aIter != maShapeIdContainer.end() ? (*aIter).second : nullptr; } +SvxMSDffImportData::SvxMSDffImportData(const tools::Rectangle& rParentRect) + : aParentRect(rParentRect) +{ +} + +SvxMSDffImportData::~SvxMSDffImportData() +{ +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index 5758ca606a1b..c9e26c9e64c6 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -710,7 +710,7 @@ sal_uLong DffPropSet::SanitizeEndPos(SvStream &rIn, sal_uLong nEndRecPos) return nEndRecPos; } -void SdrEscherImport::FreeObj(void* pData, SdrObject* pObj) +void SdrEscherImport::NotifyFreeObj(void* pData, SdrObject* pObj) { ProcessData& rData = *static_cast<ProcessData*>(pData); PptSlidePersistEntry& rPersistEntry = rData.rPersistEntry; @@ -726,7 +726,6 @@ void SdrEscherImport::FreeObj(void* pData, SdrObject* pObj) pPtr->pCObj = nullptr; } } - SvxMSDffManager::FreeObj(pData, pObj); } /* ProcessObject is called from ImplSdPPTImport::ProcessObj to handle all application specific things, |