tdf#159158 DOCX import: shape's last duplicate z-index wins
It looks like for DOCX a duplicate always comes out on top,
which is the exact opposite of what we have been doing so far.
The ability to switch between "old" and "new" style was
added for RTF's benefit, and cautiously expanded to
include when RTF and DOCX IMPORT_AS_DETECTED_INLINE.
This does not affect RTF, since AFAIK RTF cannot contain
VML-Z-ORDER properties.
Change-Id: I110e3db3fa504f1ae3a5bba5979b40f0c00a467e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162261
Tested-by: Jenkins
Reviewed-by: Justin Luth <jluth@mail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
index 5699ecb..084863c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
@@ -973,8 +973,10 @@ DECLARE_OOXMLEXPORT_TEST(testTdf159158_zOrder_zIndexDuplicate_compat15, "tdf1591
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(zOrder0, "ZOrder")); // lower
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty<sal_Int32>(zOrder1, "ZOrder")); // higher
// should be the same as relativeHeight - last duplicate wins so blue is on top.
// CPPUNIT_ASSERT_EQUAL(OUString("5-Point Star Yellow"), getProperty<OUString>(zOrder0, "Name"));
// CPPUNIT_ASSERT_EQUAL(OUString("5-Point Star Blue"), getProperty<OUString>(zOrder1,"Name"));
if (!isExported()) //somehow the name is lost on this export
CPPUNIT_ASSERT_EQUAL(OUString("5-Point Star Yellow"), getProperty<OUString>(zOrder0, "Name"));
if (!isExported()) //somehow the name is lost on this export
CPPUNIT_ASSERT_EQUAL(OUString("5-Point Star Blue"), getProperty<OUString>(zOrder1,"Name"));
}
DECLARE_OOXMLEXPORT_TEST(testTdf159158_zOrder_zIndexWins, "tdf159158_zOrder_zIndexWins.docx")
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 8606506..e92b5c9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4732,7 +4732,8 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape
GraphicZOrderHelper* pZOrderHelper = m_rDMapper.graphicZOrderHelper();
sal_Int32 zOrder(0);
rProp.Value >>= zOrder;
xShapePropertySet->setPropertyValue( "ZOrder", uno::Any(pZOrderHelper->findZOrder(zOrder)));
xShapePropertySet->setPropertyValue("ZOrder",
uno::Any(pZOrderHelper->findZOrder(zOrder, /*LastDuplicateWins*/true)));
pZOrderHelper->addItem(xShapePropertySet, zOrder);
xShapePropertySet->setPropertyValue(getPropertyName( PROP_OPAQUE ), uno::Any( zOrder >= 0 ) );
checkZOrderStatus = true;
@@ -4776,7 +4777,8 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape
GraphicZOrderHelper* pZOrderHelper = m_rDMapper.graphicZOrderHelper();
sal_Int32 zOrder(0);
rProp.Value >>= zOrder;
xShapePropertySet->setPropertyValue( "ZOrder", uno::Any(pZOrderHelper->findZOrder(zOrder)));
xShapePropertySet->setPropertyValue("ZOrder",
uno::Any(pZOrderHelper->findZOrder(zOrder, /*LastDuplicateWins*/true)));
pZOrderHelper->addItem(xShapePropertySet, zOrder);
xShapePropertySet->setPropertyValue(getPropertyName( PROP_OPAQUE ), uno::Any( zOrder >= 0 ) );
checkZOrderStatus = true;