From d23176dc22ab3ef7291757aca779f80f0cf0576b Mon Sep 17 00:00:00 2001 From: Henry Castro Date: Mon, 9 Oct 2023 07:34:02 -0400 Subject: tdf#155512: oox: ppt: fix import master slides, follow up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Import all master slides. Signed-off-by: Henry Castro Change-Id: Ieac68bacf15c75e4c23ec692aadcb16033cdd092 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157701 Tested-by: Jenkins CollaboraOffice Reviewed-by: Caolán McNamara --- oox/source/ppt/presentationfragmenthandler.cxx | 37 ++++++++++++++------------ 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'oox') diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx index 80fb6c6689a7..91824210e239 100644 --- a/oox/source/ppt/presentationfragmenthandler.cxx +++ b/oox/source/ppt/presentationfragmenthandler.cxx @@ -199,13 +199,12 @@ void PresentationFragmentHandler::importCustomSlideShow(std::vector& } } -SlidePersistPtr PresentationFragmentHandler::importMasterSlide(const Reference& xModel, - PowerPointImport& rFilter, - const OUString& rLayoutFragmentPath, - const OUString& rMasterFragmentPath) +void PresentationFragmentHandler::importMasterSlide(const Reference& xModel, + PowerPointImport& rFilter, + const OUString& rMasterFragmentPath) { OUString aLayoutFragmentPath; - SlidePersistPtr pMasterPersistPtr, pMasterPtr; + SlidePersistPtr pMasterPersistPtr; Reference< drawing::XDrawPage > xMasterPage; Reference< drawing::XMasterPagesSupplier > xMPS( xModel, uno::UNO_QUERY_THROW ); Reference< drawing::XDrawPages > xMasterPages( xMPS->getMasterPages(), uno::UNO_SET_THROW ); @@ -280,14 +279,7 @@ SlidePersistPtr PresentationFragmentHandler::importMasterSlide(const ReferenceaddTheme(pMasterPersistPtr->getPage()); } - - if (pMasterPersistPtr->getLayoutPath() == rLayoutFragmentPath) - { - pMasterPtr = pMasterPersistPtr; - } } - - return pMasterPtr; } void PresentationFragmentHandler::saveThemeToGrabBag(const oox::drawingml::ThemePtr& pThemePtr, @@ -356,6 +348,19 @@ void PresentationFragmentHandler::saveThemeToGrabBag(const oox::drawingml::Theme } } +void PresentationFragmentHandler::importMasterSlides() +{ + OUString aMasterFragmentPath; + PowerPointImport& rFilter = dynamic_cast(getFilter()); + Reference xModel(rFilter.getModel()); + + for (sal_uInt32 nMaster = 0; nMaster < maSlideMasterVector.size(); ++nMaster) + { + aMasterFragmentPath = getFragmentPathFromRelId(maSlideMasterVector[nMaster]); + importMasterSlide(xModel, rFilter, aMasterFragmentPath); + } +} + void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide, bool bFirstPage, bool bImportNotesPage) { PowerPointImport& rFilter = dynamic_cast< PowerPointImport& >( getFilter() ); @@ -370,7 +375,10 @@ void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide, bool bFirstPage try { if( bFirstPage ) + { xDrawPages->getByIndex( 0 ) >>= xSlide; + importMasterSlides(); + } else xSlide = xDrawPages->insertNewByIndex( xDrawPages->getCount() ); @@ -403,11 +411,6 @@ void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide, bool bFirstPage break; } } - - if ( !pMasterPersistPtr ) - { // masterpersist not found, we have to load it - pMasterPersistPtr = importMasterSlide(xModel, rFilter, aLayoutFragmentPath, aMasterFragmentPath); - } } } -- cgit