include/oox/ppt/presPropsfragmenthandler.hxx | 1 + oox/source/ppt/presPropsfragmenthandler.cxx | 17 +++++++++++++++++ sd/qa/unit/data/pptx/tdf142590.pptx |binary sd/qa/unit/import-tests.cxx | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+)
New commits: commit 11ef976624dce8a8e50a1eb20e9c586519fd7ec8 Author: Tibor Nagy <nagy.tib...@nisz.hu> AuthorDate: Mon Jun 14 16:06:55 2021 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Mon Jun 21 17:53:00 2021 +0200 tdf#142590 PPTX import: fix custom slide show use as default If the PPTX file contains a custom slideshow, which set by default and opening in Impress, this setting wasn't imported. See also commit 312334f8488a668e9b5302959b60292ce151e4fc "tdf#47365 PPTX export: support loop attribute" and commit a4b66458a7b8da2f5580014813e5dabe3fa670b6 "tdf#125071 PPTX: fix missing custom slide show export". Change-Id: I9c2b3773f6883ee795f119df5b8534fcdfa6618f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117172 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 8bf44b9cdceb7926fe52ef0bd4a38af24e7c700a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117562 Tested-by: Jenkins diff --git a/include/oox/ppt/presPropsfragmenthandler.hxx b/include/oox/ppt/presPropsfragmenthandler.hxx index d760f39f4524..3edf60cf3273 100644 --- a/include/oox/ppt/presPropsfragmenthandler.hxx +++ b/include/oox/ppt/presPropsfragmenthandler.hxx @@ -32,6 +32,7 @@ public: private: bool m_bLoop = false; + OUString m_sId; }; } // namespace ppt } // namespace oox diff --git a/oox/source/ppt/presPropsfragmenthandler.cxx b/oox/source/ppt/presPropsfragmenthandler.cxx index 53d831b60ae9..47965050b164 100644 --- a/oox/source/ppt/presPropsfragmenthandler.cxx +++ b/oox/source/ppt/presPropsfragmenthandler.cxx @@ -10,6 +10,9 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/presentation/XPresentationSupplier.hpp> +#include <com/sun/star/presentation/XCustomPresentationSupplier.hpp> +#include <com/sun/star/container/XNamed.hpp> +#include <com/sun/star/container/XIndexContainer.hpp> #include <oox/core/xmlfilterbase.hxx> #include <oox/helper/attributelist.hxx> @@ -33,6 +36,17 @@ void PresPropsFragmentHandler::finalizeImport() css::uno::Reference<css::beans::XPropertySet> xPresentationProps( xPresentationSupplier->getPresentation(), css::uno::UNO_QUERY_THROW); xPresentationProps->setPropertyValue("IsEndless", css::uno::Any(m_bLoop)); + + if (!m_sId.isEmpty()) + { + css::uno::Reference<css::presentation::XCustomPresentationSupplier> + XCustPresentationSupplier(getFilter().getModel(), css::uno::UNO_QUERY_THROW); + css::uno::Reference<css::container::XNameContainer> mxCustShows; + mxCustShows = XCustPresentationSupplier->getCustomPresentations(); + const css::uno::Sequence<OUString> aNameSeq(mxCustShows->getElementNames()); + xPresentationProps->setPropertyValue("CustomShow", + css::uno::Any(aNameSeq[m_sId.toInt32()])); + } } core::ContextHandlerRef PresPropsFragmentHandler::onCreateContext(sal_Int32 aElementToken, @@ -45,6 +59,9 @@ core::ContextHandlerRef PresPropsFragmentHandler::onCreateContext(sal_Int32 aEle case PPT_TOKEN(showPr): m_bLoop = rAttribs.getBool(XML_loop, false); return this; + case PPT_TOKEN(custShow): + m_sId = rAttribs.getString(XML_id).get(); + return this; } return this; } diff --git a/sd/qa/unit/data/pptx/tdf142590.pptx b/sd/qa/unit/data/pptx/tdf142590.pptx new file mode 100644 index 000000000000..ecc131c2a0f6 Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf142590.pptx differ diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index fec4db5b6586..8d7b5333f720 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -122,6 +122,7 @@ public: virtual void setUp() override; void testDocumentLayout(); + void testTdf142590(); void testCustomSlideShow(); void testInternalHyperlink(); void testHyperlinkColor(); @@ -241,6 +242,7 @@ public: CPPUNIT_TEST_SUITE(SdImportTest); CPPUNIT_TEST(testDocumentLayout); + CPPUNIT_TEST(testTdf142590); CPPUNIT_TEST(testCustomSlideShow); CPPUNIT_TEST(testInternalHyperlink); CPPUNIT_TEST(testHyperlinkColor); @@ -436,6 +438,23 @@ void SdImportTest::testDocumentLayout() } } +void SdImportTest::testTdf142590() +{ + ::sd::DrawDocShellRef xDocShRef + = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf142590.pptx"), PPTX); + + uno::Reference<presentation::XPresentationSupplier> xPresentationSupplier( + xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW); + uno::Reference<beans::XPropertySet> xPresentationProps(xPresentationSupplier->getPresentation(), + uno::UNO_QUERY_THROW); + const OUString sCustomShowId + = xPresentationProps->getPropertyValue("CustomShow").get<OUString>(); + + CPPUNIT_ASSERT(!sCustomShowId.isEmpty()); + + xDocShRef->DoClose(); +} + void SdImportTest::testCustomSlideShow() { ::sd::DrawDocShellRef xDocShRef _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits