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

Reply via email to