sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 2 ++ sw/source/filter/ww8/docxexport.cxx | 29 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 15 deletions(-)
New commits: commit fa5d80106080fa305479758dd43d0defb684376a Author: Justin Luth <jl...@mail.com> AuthorDate: Fri Jul 22 13:31:33 2022 -0400 Commit: Justin Luth <jl...@mail.com> CommitDate: Sat Jul 23 04:45:23 2022 +0200 related tdf#145998 docx export: fix writing blank headers/footers That perpetual m_bHasHdr variable was really confusing, and it was completely misused (by me). This change should make it much easier to understand the purpose. To do this completely efficiently would require multiple variables for each type, but this is good enough. (It just means we might create a few more empty headers than is absolutely necessary.) Change-Id: I0686fe2af81203021ff1bd58d79d9cd3bc81a89f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137375 Tested-by: Jenkins Reviewed-by: Justin Luth <jl...@mail.com> diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx index d1c565e1fbc4..5838f8dcb93e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx @@ -493,6 +493,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf145998_unnecessaryPageStyles) CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara->getPropertyValue("PageDescName")); // CPPUNIT_ASSERT_EQUAL(OUString("Default page style - first page style"), // parseDump("/root/page[3]/header/txt")); + CPPUNIT_ASSERT_EQUAL(OUString(), parseDump("/root/page[3]/footer/txt")); // Page Style is converted into a page break instead. Shows the "normal" header. xPara.set(getParagraph(5, "4"), uno::UNO_QUERY_THROW); @@ -503,6 +504,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf145998_unnecessaryPageStyles) // Page Style is retained (with wrong header) in order to preserve page re-numbering. xPara.set(getParagraph(7, "1"), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(uno::Any() != xPara->getPropertyValue("PageDescName")); + CPPUNIT_ASSERT_EQUAL(OUString(), parseDump("/root/page[5]/footer/txt")); } CPPUNIT_TEST_FIXTURE(Test, testTdf135216_evenOddFooter) diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index eddb4c2ea147..88f397026ff7 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -263,6 +263,10 @@ void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags, // Turn ON flag for 'Writing Headers \ Footers' m_pAttrOutput->SetWritingHeaderFooter( true ); + const bool bPrevSectionHadHeader = m_bHasHdr; + const bool bPrevSectionHadFooter = m_bHasFtr; + m_bHasHdr = m_bHasFtr = false; + // headers if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_EVEN ) WriteHeaderFooter( &rLeftHeaderFormat, true, "even" ); @@ -270,22 +274,19 @@ void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags, { if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_ODD ) WriteHeaderFooter( &rFormat, true, "even" ); - else if ( m_bHasHdr && nBreakCode == 2 ) + else if (bPrevSectionHadHeader && nBreakCode == 2) WriteHeaderFooter( nullptr, true, "even" ); } if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_ODD ) WriteHeaderFooter( &rFormat, true, "default" ); + else if (bPrevSectionHadHeader && nBreakCode == 2) // 2: nextPage + WriteHeaderFooter(nullptr, true, "default"); if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_FIRST ) WriteHeaderFooter( &rFirstPageFormat, true, "first" ); - - if( (nHeadFootFlags & (nsHdFtFlags::WW8_HEADER_EVEN - | nsHdFtFlags::WW8_HEADER_ODD - | nsHdFtFlags::WW8_HEADER_FIRST)) == 0 - && m_bHasHdr && nBreakCode == 2 ) // 2: nexPage - WriteHeaderFooter( nullptr, true, "default" ); - + else if (bPrevSectionHadHeader && nBreakCode == 2) + WriteHeaderFooter(nullptr, true, "first"); // footers if ( nHeadFootFlags & nsHdFtFlags::WW8_FOOTER_EVEN ) @@ -294,21 +295,19 @@ void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags, { if ( nHeadFootFlags & nsHdFtFlags::WW8_FOOTER_ODD ) WriteHeaderFooter( &rFormat, false, "even" ); - else if ( m_bHasFtr && nBreakCode == 2 ) + else if (bPrevSectionHadFooter && nBreakCode == 2) WriteHeaderFooter( nullptr, false, "even"); } if ( nHeadFootFlags & nsHdFtFlags::WW8_FOOTER_ODD ) WriteHeaderFooter( &rFormat, false, "default" ); + else if (bPrevSectionHadFooter && nBreakCode == 2) + WriteHeaderFooter(nullptr, false, "default"); if ( nHeadFootFlags & nsHdFtFlags::WW8_FOOTER_FIRST ) WriteHeaderFooter( &rFirstPageFormat, false, "first" ); - - if( (nHeadFootFlags & (nsHdFtFlags::WW8_FOOTER_EVEN - | nsHdFtFlags::WW8_FOOTER_ODD - | nsHdFtFlags::WW8_FOOTER_FIRST)) == 0 - && m_bHasFtr && nBreakCode == 2 ) // 2: nexPage - WriteHeaderFooter( nullptr, false, "default"); + else if (bPrevSectionHadFooter && nBreakCode == 2) + WriteHeaderFooter(nullptr, false, "first"); // Turn OFF flag for 'Writing Headers \ Footers' m_pAttrOutput->SetWritingHeaderFooter( false );