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 commit312334f848
"tdf#47365 PPTX export: support loop attribute" and commita4b66458a7
"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 <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
This commit is contained in:
committed by
László Németh
parent
9d8954197c
commit
8bf44b9cdc
@@ -32,6 +32,7 @@ public:
|
||||
|
||||
private:
|
||||
bool m_bLoop = false;
|
||||
OUString m_sId;
|
||||
};
|
||||
} // namespace ppt
|
||||
} // namespace oox
|
||||
|
@@ -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;
|
||||
}
|
||||
|
BIN
sd/qa/unit/data/pptx/tdf142590.pptx
Normal file
BIN
sd/qa/unit/data/pptx/tdf142590.pptx
Normal file
Binary file not shown.
@@ -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
|
||||
|
Reference in New Issue
Block a user