oox/source/export/shapes.cxx | 7 +++++++ sd/qa/unit/data/odp/ole_icon.odp |binary sd/qa/unit/export-tests-ooxml3.cxx | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+)
New commits: commit ea62cacd129f03813d7d3d214bf9aa2ae60bbef4 Author: Tünde Tóth <toth.tu...@nisz.hu> AuthorDate: Tue Oct 18 16:20:43 2022 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Wed Nov 2 08:03:40 2022 +0100 tdf#151622 PPTX: fix export of show as icon option Embedded OLE object wasn't look like an icon after its opening because of missing showAsIcon="1" of p:oleObj. Change-Id: I21dbd1e31f7e1de78d8bf548ca6f3619eb3e4a10 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141505 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index d102880af7bd..541f54a0fdb8 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -46,6 +46,7 @@ #include <com/sun/star/drawing/ConnectorType.hpp> #include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp> #include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp> +#include <com/sun/star/embed/Aspects.hpp> #include <com/sun/star/embed/EmbedStates.hpp> #include <com/sun/star/embed/XEmbeddedObject.hpp> #include <com/sun/star/embed/XEmbedPersist.hpp> @@ -2591,6 +2592,10 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape ) TOOLS_WARN_EXCEPTION("oox.shape", "ShapeExport::WriteOLEObject"); } + sal_Int64 nAspect; + bool bShowAsIcon = (xPropSet->getPropertyValue("Aspect") >>= nAspect) + && nAspect == embed::Aspects::MSOLE_ICON; + OUString const sRelId = mpFB->addRelation( mpFS->getOutputStream(), sRelationType, Concat2View(OUString::createFromAscii(GetRelationCompPrefix()) + sFileName)); @@ -2617,6 +2622,7 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape ) if (pProgID) { mpFS->startElementNS( mnXmlNamespace, XML_oleObj, + XML_showAsIcon, sax_fastparser::UseIf("1", bShowAsIcon), XML_progId, pProgID, FSNS(XML_r, XML_id), sRelId, XML_spid, "" ); @@ -2625,6 +2631,7 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape ) { mpFS->startElementNS( mnXmlNamespace, XML_oleObj, //? XML_name, "Document", + XML_showAsIcon, sax_fastparser::UseIf("1", bShowAsIcon), FSNS(XML_r, XML_id), sRelId, // The spec says that this is a required attribute, but PowerPoint can only handle an empty value. XML_spid, "" ); diff --git a/sd/qa/unit/data/odp/ole_icon.odp b/sd/qa/unit/data/odp/ole_icon.odp new file mode 100644 index 000000000000..073899c6e564 Binary files /dev/null and b/sd/qa/unit/data/odp/ole_icon.odp differ diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx index a4e5d882d8e6..93c8a3ac908e 100644 --- a/sd/qa/unit/export-tests-ooxml3.cxx +++ b/sd/qa/unit/export-tests-ooxml3.cxx @@ -129,6 +129,7 @@ public: void testTdf94122_autoColor(); void testTdf124333(); void testAutofittedTextboxIndent(); + void testTdf151622_oleIcon(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest3); @@ -218,6 +219,7 @@ public: CPPUNIT_TEST(testTdf94122_autoColor); CPPUNIT_TEST(testTdf124333); CPPUNIT_TEST(testAutofittedTextboxIndent); + CPPUNIT_TEST(testTdf151622_oleIcon); CPPUNIT_TEST_SUITE_END(); virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override @@ -2071,6 +2073,23 @@ void SdOOXMLExportTest3::testAutofittedTextboxIndent() "691200"); } +void SdOOXMLExportTest3::testTdf151622_oleIcon() +{ + auto xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/ole_icon.odp"), ODP); + + utl::TempFileNamed tmpfile; + xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tmpfile); + xDocShRef->DoClose(); + + xmlDocUniquePtr pXml = parseExport(tmpfile, "ppt/slides/slide1.xml"); + + // Without the accompanying fix in place, this test would have failed with: + // - Expression: prop + // - In ..., XPath '//p:oleObj' no attribute 'showAsIcon' exist + // i.e. show as icon option wasn't exported. + assertXPath(pXml, "//p:oleObj", "showAsIcon", "1"); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest3); CPPUNIT_PLUGIN_IMPLEMENT();