summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTünde Tóth <toth.tunde@nisz.hu>2022-10-18 16:20:43 +0200
committerLászló Németh <nemeth@numbertext.org>2022-11-02 08:03:40 +0100
commitea62cacd129f03813d7d3d214bf9aa2ae60bbef4 (patch)
tree47b04e541524edcaa2a27f0fd4d019ceeecd0718
parentResolves: tdf#147141 style:header-first/footer-first only ODF 1.3|1.2-extended (diff)
downloadcore-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.cxx7
-rw-r--r--sd/qa/unit/data/odp/ole_icon.odpbin0 -> 18926 bytes
-rw-r--r--sd/qa/unit/export-tests-ooxml3.cxx19
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
new file mode 100644
index 000000000000..073899c6e564
--- /dev/null
+++ b/sd/qa/unit/data/odp/ole_icon.odp
Binary files 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();