sw/qa/extras/uiwriter/data2/tdf126206.docx |binary sw/qa/extras/uiwriter/uiwriter2.cxx | 30 ++++++++++++++++++++++++++ sw/source/core/doc/DocumentRedlineManager.cxx | 12 +++++----- sw/source/core/doc/docredln.cxx | 14 ++++++++++-- 4 files changed, 48 insertions(+), 8 deletions(-)
New commits: commit 5322663f8234836a6a4aaaed025c158fd7e8b67a Author: László Németh <nem...@numbertext.org> AuthorDate: Tue Jul 2 18:36:32 2019 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Wed Jul 3 17:32:40 2019 +0200 tdf#126206 DOCX: add rejection of character formatting changes using imported change tracking data, instead of clearing only direct formatting in the modified text range. See commit 9c4eef7d809ad7d283860c7b47b0f561aa240906 "tdf#52391 reject/clear formatting of format-only changes". Change-Id: Ie27d5c5bca6d9f30681e8f542f95417e9bb4c266 Reviewed-on: https://gerrit.libreoffice.org/75011 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/extras/uiwriter/data2/tdf126206.docx b/sw/qa/extras/uiwriter/data2/tdf126206.docx new file mode 100644 index 000000000000..166125e7a738 Binary files /dev/null and b/sw/qa/extras/uiwriter/data2/tdf126206.docx differ diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx index 04b2c4df88ba..24e3f3ddec38 100644 --- a/sw/qa/extras/uiwriter/uiwriter2.cxx +++ b/sw/qa/extras/uiwriter/uiwriter2.cxx @@ -8,6 +8,7 @@ */ #include <swmodeltestbase.hxx> +#include <com/sun/star/awt/FontWeight.hpp> #include <com/sun/star/frame/DispatchHelper.hpp> #include <com/sun/star/style/LineSpacing.hpp> #include <comphelper/propertysequence.hxx> @@ -1139,6 +1140,35 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf52391) CPPUNIT_ASSERT_EQUAL(OUString("Portion1Portion2"), xRun->getString()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf126206) +{ + load(DATA_DIRECTORY, "tdf126206.docx"); + + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // normal text (it was bold) + auto xText = getParagraph(1)->getText(); + CPPUNIT_ASSERT(xText.is()); + { + auto xCursor(xText->createTextCursorByRange(getRun(getParagraph(1), 2))); + CPPUNIT_ASSERT(xCursor.is()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, getProperty<float>(xCursor, "CharWeight")); + } + + // reject tracked changes + lcl_dispatchCommand(mxComponent, ".uno:RejectAllTrackedChanges", {}); + + // bold text again + xText = getParagraph(1)->getText(); + CPPUNIT_ASSERT(xText.is()); + { + auto xCursor(xText->createTextCursorByRange(getRun(getParagraph(1), 2))); + CPPUNIT_ASSERT(xCursor.is()); + CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xCursor, "CharWeight")); + } +} + CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf101873) { SwDoc* pDoc = createDoc(); diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx index 30b6b09300b2..e46de6b0b648 100644 --- a/sw/source/core/doc/DocumentRedlineManager.cxx +++ b/sw/source/core/doc/DocumentRedlineManager.cxx @@ -649,9 +649,6 @@ namespace case RedlineType::Format: case RedlineType::FmtColl: { - if( pRedl->GetExtraData() ) - pRedl->GetExtraData()->Reject( *pRedl ); - // tdf#52391 instead of hidden acception at the requested // rejection, remove direct text formatting to get the potential // original state of the text (FIXME if the original text @@ -660,10 +657,13 @@ namespace if ( pRedl->GetType() == RedlineType::Format ) { SwPaM aPam( *(pRedl->Start()), *(pRedl->End()) ); - rArr.DeleteAndDestroy( rPos-- ); rDoc.ResetAttrs(aPam); - } else - rArr.DeleteAndDestroy( rPos-- ); + } + + if( pRedl->GetExtraData() ) + pRedl->GetExtraData()->Reject( *pRedl ); + + rArr.DeleteAndDestroy( rPos-- ); } break; diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx index 36734eaa0c61..94c903bbc56f 100644 --- a/sw/source/core/doc/docredln.cxx +++ b/sw/source/core/doc/docredln.cxx @@ -913,9 +913,19 @@ SwRedlineExtraData* SwRedlineExtraData_FormattingChanges::CreateNew() const return new SwRedlineExtraData_FormattingChanges( *this ); } -void SwRedlineExtraData_FormattingChanges::Reject(SwPaM&) const +void SwRedlineExtraData_FormattingChanges::Reject(SwPaM& rPam) const { - // ToDo: Add 'Reject' logic + SwDoc* pDoc = rPam.GetDoc(); + + if( m_pSet ) + { + RedlineFlags eOld = pDoc->getIDocumentRedlineAccess().GetRedlineFlags(); + pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags(RedlineFlags::On | RedlineFlags::Ignore)); + + pDoc->getIDocumentContentOperations().InsertItemSet(rPam, *GetItemSet()); + + pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld ); + } } bool SwRedlineExtraData_FormattingChanges::operator == ( const SwRedlineExtraData& rExtraData ) const _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits