summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-01-25 21:05:12 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2021-01-27 15:18:00 +0100
commit77bc50ae97e2447ec997d32a91c93c5fa44a6fb3 (patch)
treefc21e062374a436ac3a6bb44e1bac001846841e5
parentFix crash in ProcessEventsToIdle debug code (diff)
downloadcore-77bc50ae97e2447ec997d32a91c93c5fa44a6fb3.tar.gz
core-77bc50ae97e2447ec997d32a91c93c5fa44a6fb3.zip
tdf#134605 DOCX export: fix unexpected loss of footer margin
Regression from commit 51534ac2b9747975945acb6a1e1ba5cc6d73f5c2 (tdf#127778 DOCX import: fix unexpected heading on non-first page ..., 2020-05-11), which replaced an import fix with an export fix. What was missed there is the import fix handled both headers and footers, while the export fix only handled headers. Fix the problem by doing the same mapping for footers: if a follow page style has no footer, but the first page style has, then take the margin from that one. The import side did the opposite of this already. (cherry picked from commit 80b360085f5974fbb3abe49a88b20f4d39704fb5) Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport16.cxx Change-Id: Ibb191db4136bce0ad5e4bf14dcea15f5955bd298 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110008 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r--sw/qa/extras/ooxmlexport/data/footer-margin-lost.docxbin0 -> 21058 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport16.cxx10
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx11
3 files changed, 21 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx b/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx
new file mode 100644
index 000000000000..d6a9d7bd8df9
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/footer-margin-lost.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
index e12804e58289..c2d17d965781 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
@@ -38,6 +38,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf138892_noNumbering, "tdf138892_noNumbering.docx"
CPPUNIT_ASSERT_MESSAGE("Para3: <blank line>", getProperty<OUString>(getParagraph(3), "NumberingStyleName").isEmpty());
}
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testFooterMarginLost, "footer-margin-lost.docx")
+{
+ xmlDocUniquePtr pXmlDoc = parseExport();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 709
+ // - Actual : 0
+ // i.e. import + export lost the footer margin value.
+ assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgMar", "footer", "709");
+}
+
DECLARE_OOXMLEXPORT_TEST(testTdf138953, "croppedAndRotated.odt")
{
CPPUNIT_ASSERT_EQUAL(1, getShapes());
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index cc63cb5160ea..4f8773bef97b 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -8547,6 +8547,17 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace )
sal_Int32 nFooter = 0;
if ( aDistances.HasFooter() )
nFooter = sal_Int32( aDistances.dyaHdrBottom );
+ else if (m_rExport.m_pFirstPageFormat)
+ {
+ HdFtDistanceGlue aFirstPageDistances(m_rExport.m_pFirstPageFormat->GetAttrSet());
+ if (aFirstPageDistances.HasFooter())
+ {
+ // The follow page style has no footer, but the first page style has. In Word terms,
+ // this means that the footer margin of "the" section is coming from the first page
+ // style.
+ nFooter = sal_Int32(aFirstPageDistances.dyaHdrBottom);
+ }
+ }
// Page Bottom
m_pageMargins.nBottom = aDistances.dyaBottom;