From 27fa442a86d4ffdad08feebc1841a79f7d1ce5a4 Mon Sep 17 00:00:00 2001 From: Henry Castro Date: Wed, 24 Jan 2018 15:11:00 -0400 Subject: sw lok: include the field name in the description of the redline In tiled rendering case, when the text node is a field, the description shows incorrect characters Change-Id: I1e3a456b6e2a19a7629b58a8a6ae77e2090a06a1 Reviewed-on: https://gerrit.libreoffice.org/48538 Tested-by: Jenkins Reviewed-by: Henry Castro Reviewed-on: https://gerrit.libreoffice.org/48723 Reviewed-by: Jan Holesovsky Tested-by: Jan Holesovsky --- sw/qa/extras/tiledrendering/tiledrendering.cxx | 27 ++++++++++++++++++++++++++ sw/source/core/doc/docredln.cxx | 12 +++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) (limited to 'sw') diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index 226874291be6..089537b6dc0c 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -38,6 +38,7 @@ #include #include #include +#include static const char* DATA_DIRECTORY = "/sw/qa/extras/tiledrendering/data/"; @@ -93,6 +94,7 @@ public: void testDocumentRepair(); void testPageHeader(); void testPageFooter(); + void testRedlineField(); CPPUNIT_TEST_SUITE(SwTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -142,6 +144,7 @@ public: CPPUNIT_TEST(testDocumentRepair); CPPUNIT_TEST(testPageHeader); CPPUNIT_TEST(testPageFooter); + CPPUNIT_TEST(testRedlineField); CPPUNIT_TEST_SUITE_END(); private: @@ -2009,6 +2012,30 @@ void SwTiledRenderingTest::testPageFooter() } +void SwTiledRenderingTest::testRedlineField() +{ + // Load a document. + comphelper::LibreOfficeKit::setActive(); + SwXTextDocument* pXTextDocument = createDoc("dummy.fodt"); + SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell(); + + // Turn on track changes and type "x". + uno::Reference xPropertySet(mxComponent, uno::UNO_QUERY); + xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true)); + + SwDateTimeField aDate(static_cast(pWrtShell->GetFieldType(0, RES_DATETIMEFLD))); + //aDate->SetDateTime(::DateTime(::DateTime::SYSTEM)); + pWrtShell->Insert(aDate); + + // Get the redline just created + const SwRedlineTable& rTable = pWrtShell->GetDoc()->getIDocumentRedlineAccess().GetRedlineTable(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rTable.size()); + SwRangeRedline* pRedline = rTable[0]; + CPPUNIT_ASSERT(pRedline->GetDescr().indexOf(aDate.GetFieldName())!= -1); + + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx index 0803609ae963..2d24fe55fdbd 100644 --- a/sw/source/core/doc/docredln.cxx +++ b/sw/source/core/doc/docredln.cxx @@ -57,6 +57,7 @@ #include #include #include +#include #include "flowfrm.hxx" @@ -1777,9 +1778,18 @@ OUString SwRangeRedline::GetDescr() bDeletePaM = true; } + OUString sDescr = pPaM->GetText(); + if (const SwTextNode *pTextNode = pPaM->GetNode().GetTextNode()) + { + if (const SwTextAttr* pTextAttr = pTextNode->GetFieldTextAttrAt(pPaM->GetPoint()->nContent.GetIndex() - 1, true )) + { + sDescr = pTextAttr->GetFormatField().GetField()->GetFieldName(); + } + } + // replace $1 in description by description of the redlines text const OUString aTmpStr = SW_RESSTR(STR_START_QUOTE) - + ShortenString(pPaM->GetText(), nUndoStringLength, SW_RESSTR(STR_LDOTS)) + + ShortenString(sDescr, nUndoStringLength, SW_RESSTR(STR_LDOTS)) + SW_RESSTR(STR_END_QUOTE); SwRewriter aRewriter; -- cgit