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;