summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--oox/source/export/shapes.cxx3
-rw-r--r--sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odtbin0 -> 15349 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport10.cxx30
3 files changed, 32 insertions, 1 deletions
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 86ca6264129d..138106938ee2 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -928,7 +928,8 @@ ShapeExport& ShapeExport::WriteCustomShape( const Reference< XShape >& xShape )
// as preset ones with parameters. Try that with this converter class.
if (!sShapeType.startsWith("ooxml") && sShapeType != "non-primitive"
&& GetDocumentType() == DOCUMENT_DOCX && !mbUserShapes
- && xShape->getShapeType() == "com.sun.star.drawing.CustomShape")
+ && xShape->getShapeType() == "com.sun.star.drawing.CustomShape"
+ && !lcl_IsOnAllowlist(sShapeType))
{
DMLPresetShapeExporter aCustomShapeConverter(this, xShape);
bPresetWriteSuccessful = aCustomShapeConverter.WriteShape();
diff --git a/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt
new file mode 100644
index 000000000000..6f7a62deecd2
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx
index 633aa6ddb4eb..c97acffdc038 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx
@@ -1292,6 +1292,36 @@ DECLARE_OOXMLEXPORT_TEST( testTableCellMargin, "table-cell-margin.docx" )
}
}
+DECLARE_OOXMLEXPORT_TEST(TestPuzzleExport, "TestPuzzleExport.odt")
+{
+ // See tdf#148342 fo details
+ // Get the doc
+ uno::Reference< text::XTextDocument > xTextDoc(mxComponent, uno::UNO_QUERY_THROW);
+ auto pSwDoc = dynamic_cast<SwXTextDocument*>(xTextDoc.get());
+ CPPUNIT_ASSERT(pSwDoc);
+ // Create a metafile
+ auto pMeta = pSwDoc->GetDocShell()->GetPreviewMetaFile();
+ CPPUNIT_ASSERT(pMeta);
+ MetafileXmlDump aDumper;
+ auto pMetaXml = dumpAndParse(aDumper, *pMeta);
+ CPPUNIT_ASSERT(pMetaXml);
+ // After parsing check that node...
+ auto pXNode = getXPathNode(pMetaXml, "/metafile/push/push/push/push[4]/push/push/polypolygon/polygon");
+ CPPUNIT_ASSERT(pXNode);
+ auto pNode = pXNode->nodesetval->nodeTab[0];
+ CPPUNIT_ASSERT(pNode);
+ auto it = pNode->children;
+ int nCount = 0;
+ // .. and count the children
+ while (it != nullptr)
+ {
+ nCount++;
+ it = it->next;
+ }
+ // In case of puzzle thre will be so many... Without the fix there was a rectangle with 4 points.
+ CPPUNIT_ASSERT_GREATER(300, nCount);
+}
+
// tdf#106742 for DOCX with compatibility level <= 14 (MS Word up to and incl. ver.2010), we should use cell margins when calculating table left border position
DECLARE_OOXMLEXPORT_TEST( testTablePosition14, "table-position-14.docx" )
{