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();

Reply via email to