sw/qa/extras/ooxmlexport/ooxmlexport18.cxx        |    2 ++
 sw/qa/extras/ooxmlexport/ooxmlexport5.cxx         |    2 +-
 sw/source/filter/ww8/docxattributeoutput.cxx      |    3 ++-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   14 +++++++++-----
 4 files changed, 14 insertions(+), 7 deletions(-)

New commits:
commit 44401e14ff0aab5bc9505c2ec3b78ce91eaf8f4f
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Tue Oct 3 15:43:00 2023 -0400
Commit:     Justin Luth <jl...@mail.com>
CommitDate: Wed Oct 4 18:41:32 2023 +0200

    related tdf#157572 writerfilter framePr: no vAlign if w:y defined
    
    Documentation suggests that vAlign overrides w:y
    (as long as vAnchor is not equal to text).
    However, testing proves the opposite.
    Only when w:y is not defined does vAlign take effect.
    
    make CppunitTest_sw_ooxmlexport5 \
        CPPUNIT_TEST_NAME=testTdf157572_defaultVAnchor
    
    make CppunitTest_sw_ooxmlexport18 \
        CPPUNIT_TEST_NAME=testTdf154703_framePr2
    
    Change-Id: I8a5366d9b6bde0ad838f9584836a85fe79ce8b1b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157528
    Tested-by: Justin Luth <jl...@mail.com>
    Reviewed-by: Justin Luth <jl...@mail.com>

diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
index ddf14cb6bc10..bf7eb22eb270 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx
@@ -285,6 +285,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf154703_framePr2, 
"tdf154703_framePr2.rtf")
     assertXPath(pXmlDoc, "//w:body/w:p[1]/w:pPr/w:shd", "fill", "800000");
     assertXPath(pXmlDoc, "//w:body/w:p[2]/w:pPr/w:shd", "fill", "548DD4"); // 
was blue already, no change
     assertXPath(pXmlDoc, "//w:body/w:p[3]/w:pPr/w:shd", "fill", "800000");
+    assertXPath(pXmlDoc, "//w:body/w:p[3]/w:pPr/w:framePr", "yAlign", 
"center");
+    assertXPathNoAttribute(pXmlDoc, "//w:body/w:p[3]/w:pPr/w:framePr", "y");
 }
 
 DECLARE_OOXMLEXPORT_TEST(testTdf154703_framePrWrapSpacing, 
"tdf154703_framePrWrapSpacing.docx")
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 71cea9fa2964..2ee3e1e80bf7 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -1437,7 +1437,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf157572_defaultVAnchor)
     // vAnchor wasn't defined on import. It should default to 'margin' when 
w:y=non-zero
     assertXPath(pXmlDocument, 
"/w:document/w:body/w:p[1]/w:pPr/w:framePr","vAnchor","margin");
     // yAlign=something is not compatible with w:y=non-zero" - don't write 
anything out
-    // assertXPathNoAttribute(pXmlDocument, 
"/w:document/w:body/w:p[1]/w:pPr/w:framePr", "yAlign");
+    assertXPathNoAttribute(pXmlDocument, 
"/w:document/w:body/w:p[1]/w:pPr/w:framePr", "yAlign");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testTdf112287B)
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index b809870dcf28..1b209d26a0de 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1050,7 +1050,6 @@ void DocxAttributeOutput::PopulateFrameProperties(const 
SwFrameFormat* pFrameFor
     attrList->add( FSNS( XML_w, XML_h), OString::number(rSize.Height()));
 
     attrList->add( FSNS( XML_w, XML_x), OString::number(aPos.X));
-    attrList->add( FSNS( XML_w, XML_y), OString::number(aPos.Y));
 
     OString aXAlign = convertToOOXMLHoriOrient(rHoriOrient.GetHoriOrient(), 
/*bIsPosToggle=*/false);
     OString aYAlign = convertToOOXMLVertOrient(rVertOrient.GetVertOrient());
@@ -1058,6 +1057,8 @@ void DocxAttributeOutput::PopulateFrameProperties(const 
SwFrameFormat* pFrameFor
         attrList->add(FSNS(XML_w, XML_xAlign), aXAlign);
     if (!aYAlign.isEmpty())
         attrList->add(FSNS(XML_w, XML_yAlign), aYAlign);
+    else
+        attrList->add( FSNS( XML_w, XML_y), OString::number(aPos.Y));
 
     sal_Int16 nLeft = pFrameFormat->GetLRSpace().GetLeft();
     sal_Int16 nRight = pFrameFormat->GetLRSpace().GetRight();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 9c1b32a54927..77528bc546c7 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1863,12 +1863,16 @@ DomainMapper_Impl::MakeFrameProperties(const 
ParagraphProperties& rProps)
             
comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT_POSITION), nY));
 
         sal_Int16 nVertOrient = text::VertOrientation::NONE;
-        for (const auto pProp : vProps)
+        // Testing indicates that yAlign should be ignored if there is any 
specified w:y
+        if (!bValidY)
         {
-            if (pProp->GetyAlign() < 0)
-                continue;
-            nVertOrient = pProp->GetyAlign();
-            break;
+            for (const auto pProp : vProps)
+            {
+                if (pProp->GetyAlign() < 0)
+                    continue;
+                nVertOrient = pProp->GetyAlign();
+                break;
+            }
         }
         aFrameProperties.push_back(
             comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT), 
nVertOrient));

Reply via email to