sw/qa/extras/ooxmlexport/data/CT-with-frame.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport12.cxx | 10 ++++++++++ sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx | 3 +-- 3 files changed, 11 insertions(+), 2 deletions(-)
New commits: commit d09f3f24c38eda633825f4ac214731db06bc9a9a Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Tue Feb 25 16:03:20 2025 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Tue Feb 25 18:08:53 2025 +0100 tdf#165330 writerfilter: fix import of redline in paragraph after frame The flag m_bIsActualParagraphFramed is reset only in ExecuteFrameConversion() which is called at the end of the paragraph that follows the one that is in the frame, so all redlines in that paragraph were erroneously moved to the frame; reset it when a paragraph ends, if the next paragraph is also in the frame it can set the flag again. (regression from commit e8bae67b3dbcc90ace8264b6b1aefaf0ce459aba) Change-Id: I75a18d2e7b600737958e984c135ebf6201e6f979 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182181 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/sw/qa/extras/ooxmlexport/data/CT-with-frame.docx b/sw/qa/extras/ooxmlexport/data/CT-with-frame.docx new file mode 100644 index 000000000000..85653b0caaec Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/CT-with-frame.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx index 17b09796db41..7eb8f39f4137 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx @@ -1603,6 +1603,16 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf128156) assertXPath(pXmlDoc, "//w:ins", 2); } +CPPUNIT_TEST_FIXTURE(Test, testTdf165330) +{ + loadAndSave("CT-with-frame.docx"); + + xmlDocUniquePtr pXmlDoc = parseExport(u"word/document.xml"_ustr); + // check that *both* tracked changes were round tripped + assertXPathContent(pXmlDoc, "//w:p[1]/w:ins/w:r/w:t", u"world! "); + assertXPathContent(pXmlDoc, "//w:p[3]/w:ins/w:r/w:t", u"hello "); +} + CPPUNIT_TEST_FIXTURE(Test, testTdf125546) { loadAndSave("tdf125546.docx"); diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx index a57d02af3d7a..50475768e4b6 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx @@ -3105,6 +3105,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con else SetIsPreviousParagraphFramed(false); + m_bIsActualParagraphFramed = false; m_StreamStateStack.top().bRemoveThisParagraph = false; if( !IsInHeaderFooter() && !IsInShape() && (!pParaContext || !pParaContext->props().IsFrameMode()) ) @@ -9714,8 +9715,6 @@ void DomainMapper_Impl::ExecuteFrameConversion() DBG_UNHANDLED_EXCEPTION( "writerfilter.dmapper", "Exception caught when converting to frame"); } - m_bIsActualParagraphFramed = false; - if (redPos.size() == m_aStoredRedlines[StoredRedlines::FRAME].size()) { for( sal_Int32 i = m_aStoredRedlines[StoredRedlines::FRAME].size() - 1; i >= 0; --i)