diff options
-rw-r--r-- | sw/qa/extras/tiledrendering/tiledrendering.cxx | 32 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewstat.cxx | 9 |
2 files changed, 38 insertions, 3 deletions
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index d1837c781ebb..ad8deaf383a6 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -67,6 +67,7 @@ public: void testUndoRepairDispatch(); void testShapeTextUndoShells(); void testShapeTextUndoGroupShells(); + void testTrackChanges(); CPPUNIT_TEST_SUITE(SwTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -99,6 +100,7 @@ public: CPPUNIT_TEST(testUndoRepairDispatch); CPPUNIT_TEST(testShapeTextUndoShells); CPPUNIT_TEST(testShapeTextUndoGroupShells); + CPPUNIT_TEST(testTrackChanges); CPPUNIT_TEST_SUITE_END(); private: @@ -1137,6 +1139,36 @@ void SwTiledRenderingTest::testShapeTextUndoGroupShells() comphelper::LibreOfficeKit::setActive(false); } +void SwTiledRenderingTest::testTrackChanges() +{ + // Load a document. + comphelper::LibreOfficeKit::setActive(); + SwXTextDocument* pXTextDocument = createDoc("dummy.fodt"); + + // Turn on trak changes, type "zzz" at the end, and move to the start. + uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY); + xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true)); + SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell(); + pWrtShell->EndDoc(); + pWrtShell->Insert("zzz"); + pWrtShell->SttDoc(); + + // Reject the change by index, while the cursor does not cover the tracked change. + uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence( + { + {"RejectTrackedChange", uno::makeAny(static_cast<sal_uInt16>(0))} + })); + comphelper::dispatchCommand(".uno:RejectTrackedChange", aPropertyValues); + Scheduler::ProcessEventsToIdle(); + + // Assert that the reject was performed. + SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false); + // This was 'Aaa bbb.zzz', the change wasn't rejected. + CPPUNIT_ASSERT_EQUAL(OUString("Aaa bbb."), pShellCursor->GetPoint()->nNode.GetNode().GetTextNode()->GetText()); + + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx index 6815a61bb11f..31d6b03a2522 100644 --- a/sw/source/uibase/uiview/viewstat.cxx +++ b/sw/source/uibase/uiview/viewstat.cxx @@ -51,6 +51,7 @@ #include <globdoc.hxx> #include <svl/stritem.hxx> #include <unotools/moduleoptions.hxx> +#include <comphelper/lok.hxx> #include <svl/visitem.hxx> #include <redline.hxx> #include <docary.hxx> @@ -286,8 +287,10 @@ void SwView::GetState(SfxItemSet &rSet) SwPaM *pCursor = m_pWrtShell->GetCursor(); if (GetDocShell()->HasChangeRecordProtection()) rSet.DisableItem(nWhich); - else if (pCursor->HasMark()) - { // If the selection does not contain redlines, disable accepting/rejecting changes. + else if (pCursor->HasMark() && !comphelper::LibreOfficeKit::isActive()) + { + // If the selection does not contain redlines, disable accepting/rejecting changes. + // Though LibreOfficeKit wants to handle changes by index, so always allow there. sal_uInt16 index = 0; const SwRedlineTable& table = pDoc->getIDocumentRedlineAccess().GetRedlineTable(); const SwRangeRedline* redline = table.FindAtPosition( *pCursor->Start(), index ); @@ -310,7 +313,7 @@ void SwView::GetState(SfxItemSet &rSet) if( redline == nullptr ) rSet.DisableItem(nWhich); } - else + else if (!comphelper::LibreOfficeKit::isActive()) { // If the cursor position isn't on a redline, disable // accepting/rejecting changes. |