sw/qa/extras/tiledrendering/data/savedauthorfield.odt |binary sw/qa/extras/tiledrendering/tiledrendering.cxx | 16 ++++++++++++++++ sw/source/uibase/uno/unotxdoc.cxx | 16 +++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-)
New commits: commit c33e60dd5d5aa8dd585afc9498f87d17ab22fb27 Author: Dennis Francis <dennis.fran...@collabora.com> AuthorDate: Mon Jan 9 14:14:02 2023 +0530 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Jan 12 07:22:05 2023 +0000 sw: lok: use redline author for saved author fields Without the fix author fields will expand to "Unknown author" when loading files which have author fields in them. But only update the fields when the first view joins and not for later view joins. Change-Id: I4ac3b25349b8057812c45dc8148f8b3fc3b7ca1e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145192 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sw/qa/extras/tiledrendering/data/savedauthorfield.odt b/sw/qa/extras/tiledrendering/data/savedauthorfield.odt new file mode 100644 index 000000000000..a060c5892f12 Binary files /dev/null and b/sw/qa/extras/tiledrendering/data/savedauthorfield.odt differ diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index 88b4dcc95d7f..3330e419dc8b 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -3791,6 +3791,22 @@ CPPUNIT_TEST_FIXTURE(SwTiledRenderingTest, testAuthorField) assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "rText", sAuthor); } +CPPUNIT_TEST_FIXTURE(SwTiledRenderingTest, testSavedAuthorField) +{ + SwXTextDocument* pXTextDocument = createDoc("savedauthorfield.odt"); + const OUString sAuthor("XYZ ABCD"); + uno::Sequence<beans::PropertyValue> aPropertyValues1(comphelper::InitPropertySequence( + { + {".uno:Author", uno::makeAny(sAuthor)}, + })); + pXTextDocument->initializeForTiledRendering(aPropertyValues1); + + Scheduler::ProcessEventsToIdle(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "rText", sAuthor); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index f91fe5626f1b..05bddd1f5747 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3570,6 +3570,9 @@ void SwXTextDocument::initializeForTiledRendering(const css::uno::Sequence<css:: // Disable field shadings: the result would depend on the cursor position. SwViewOption::SetAppearanceFlag(ViewOptFlags::FieldShadings, false); + OUString sOrigAuthor = SW_MOD()->GetRedlineAuthor(SW_MOD()->GetRedlineAuthor()); + OUString sAuthor; + for (const beans::PropertyValue& rValue : rArguments) { if (rValue.Name == ".uno:HideWhitespace" && rValue.Value.has<bool>()) @@ -3578,8 +3581,9 @@ void SwXTextDocument::initializeForTiledRendering(const css::uno::Sequence<css:: SwViewOption::SetAppearanceFlag(ViewOptFlags::Shadow , rValue.Value.get<bool>()); else if (rValue.Name == ".uno:Author" && rValue.Value.has<OUString>()) { + sAuthor = rValue.Value.get<OUString>(); // Store the author name in the view. - pView->SetRedlineAuthor(rValue.Value.get<OUString>()); + pView->SetRedlineAuthor(sAuthor); // Let the actual author name pick up the value from the current // view, which would normally happen only during the next view // switch. @@ -3589,6 +3593,16 @@ void SwXTextDocument::initializeForTiledRendering(const css::uno::Sequence<css:: aViewOption.SetOnlineSpell(rValue.Value.get<bool>()); } + if (!sAuthor.isEmpty() && sAuthor != sOrigAuthor) + { + SwView* pFirstView = static_cast<SwView*>(SfxViewShell::GetFirst()); + if (pFirstView && SfxViewShell::GetNext(*pFirstView) == nullptr) + { + if (SwViewShell* pShell = &pFirstView->GetWrtShell()) + pShell->UpdateFields(true); + } + } + // Set the initial zoom value to 1; usually it is set in setClientZoom and // SwViewShell::PaintTile; zoom value is used for chart in place // editing, see postMouseEvent and setGraphicSelection methods.