diff options
author | Tünde Tóth <toth.tunde@nisz.hu> | 2022-10-18 16:20:43 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2022-11-02 08:03:40 +0100 |
commit | ea62cacd129f03813d7d3d214bf9aa2ae60bbef4 (patch) | |
tree | 47b04e541524edcaa2a27f0fd4d019ceeecd0718 | |
parent | Resolves: tdf#147141 style:header-first/footer-first only ODF 1.3|1.2-extended (diff) | |
download | core-ea62cacd129f03813d7d3d214bf9aa2ae60bbef4.tar.gz core-ea62cacd129f03813d7d3d214bf9aa2ae60bbef4.zip |
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 <nemeth@numbertext.org>
-rw-r--r-- | oox/source/export/shapes.cxx | 7 | ||||
-rw-r--r-- | sd/qa/unit/data/odp/ole_icon.odp | bin | 0 -> 18926 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests-ooxml3.cxx | 19 |
3 files changed, 26 insertions, 0 deletions
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 Binary files differnew file mode 100644 index 000000000000..073899c6e564 --- /dev/null +++ b/sd/qa/unit/data/odp/ole_icon.odp 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(); |