tdf#136589 writerfilter: reset ParaHadField

::finishParagraph normally resets this, but it exited
early because of m_bDiscardHeaderFooter, so the setting
spilled over into the following paragraph.

This is a bit of a bandaid - likely stacks of paragraphs
and sections need to be used so each can hold its
own settings and not worry about them being clobbered.
But this particular case seems to a single level problem,
isolated to headers/footers, so the change should
both be enough and regression-safe.

Change-Id: I84c9a5d6bf95c35c4996a9b31e53f18c05ade727
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102314
Tested-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx b/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx
new file mode 100644
index 0000000..c4cf7a1
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf136589_paraHadField.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
index 999ef57..b3c3d79 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
@@ -299,6 +299,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf135216_evenOddFooter, "tdf135216_evenOddFooter.o
    getParagraph(2, "2");
}

DECLARE_OOXMLEXPORT_TEST(testTdf136589_paraHadField, "tdf136589_paraHadField.docx")
{
    // The section break should not add an additional CR - which equals an empty page two.
    CPPUNIT_ASSERT_EQUAL(2, getPages());
}

DECLARE_OOXMLEXPORT_TEST(testTdf133370_columnBreak, "tdf133370_columnBreak.odt")
{
    // Since non-DOCX formats ignores column breaks in non-column situations, don't export to docx.
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index e7b571d..e7ecfff 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -313,6 +313,7 @@ DomainMapper_Impl::DomainMapper_Impl(
        m_bIsActualParagraphFramed( false ),
        m_vTextFramesForChaining(),
        m_bParaHadField(false),
        m_bSaveParaHadField(false),
        m_bParaAutoBefore(false),
        m_bFirstParagraphInCell(true),
        m_bSaveFirstParagraphInCell(false),
@@ -2438,6 +2439,7 @@ void DomainMapper_Impl::appendGlossaryEntry()

void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType)
{
    m_bSaveParaHadField = m_bParaHadField;
    m_aHeaderFooterStack.push(HeaderFooterContext(m_bTextInserted, m_nTableDepth));
    m_bTextInserted = false;
    m_nTableDepth = 0;
@@ -2538,6 +2540,8 @@ void DomainMapper_Impl::PopPageHeaderFooter()
        m_nTableDepth = m_aHeaderFooterStack.top().getTableDepth();
        m_aHeaderFooterStack.pop();
    }

    m_bParaHadField = m_bSaveParaHadField;
}

void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 33ec662..1a9f934 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -1074,6 +1074,7 @@ private:
    std::vector<css::uno::Reference< css::drawing::XShape > > m_vTextFramesForChaining ;
    /// Current paragraph had at least one field in it.
    bool m_bParaHadField;
    bool m_bSaveParaHadField;
    css::uno::Reference<css::beans::XPropertySet> m_xPreviousParagraph;
    /// Current paragraph has automatic before spacing.
    bool m_bParaAutoBefore;