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 <nemeth@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 0000000..166125e
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/tdf126206.docx
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 04b2c4d..24e3f3d 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 30b6b09..e46de6b 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 36734ea..94c903b 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