diff options
author | Pranam Lashkari <lpranam@collabora.com> | 2024-02-14 15:07:38 +0530 |
---|---|---|
committer | Caolán McNamara <caolan.mcnamara@collabora.com> | 2024-02-17 21:49:28 +0100 |
commit | a0bd028a00165996224c93a4eba4b6affe6743e0 (patch) | |
tree | c6f92cbab85ef02c877945cf7a18e4129a8edc6d | |
parent | avoid using subView on empty OUString (diff) | |
download | core-a0bd028a00165996224c93a4eba4b6affe6743e0.tar.gz core-a0bd028a00165996224c93a4eba4b6affe6743e0.zip |
writer: LOK: make sure redline comment undo/redo is notified
problem:
when actions were performed on comments and changes were tracked,
LOK was not notified and actions were not reflected
Change-Id: Iad4d9338a6205278b586106e8f39769b731f18dc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163357
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Gökay ŞATIR <gokaysatir@collabora.com>
(cherry picked from commit 0b7a9c231f66b5c2659ab3aa6a0f3c7991b9e721)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163502
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
-rw-r--r-- | sw/source/core/doc/DocumentRedlineManager.cxx | 12 | ||||
-rw-r--r-- | sw/source/core/doc/docredln.cxx | 36 |
2 files changed, 37 insertions, 11 deletions
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx index 3f5ccfc0ec5c..710baaf41b94 100644 --- a/sw/source/core/doc/DocumentRedlineManager.cxx +++ b/sw/source/core/doc/DocumentRedlineManager.cxx @@ -20,6 +20,7 @@ #include <frmfmt.hxx> #include <rootfrm.hxx> #include <txtfrm.hxx> +#include <txtfld.hxx> #include <doc.hxx> #include <docsh.hxx> #include <wrtsh.hxx> @@ -40,6 +41,7 @@ #include <swmodule.hxx> #include <osl/diagnose.h> #include <editeng/prntitem.hxx> +#include <comphelper/lok.hxx> using namespace com::sun::star; @@ -383,8 +385,14 @@ void UpdateFramesForRemoveDeleteRedline(SwDoc & rDoc, SwPaM const& rPam) // fields last - SwGetRefField::UpdateField requires up-to-date frames UpdateFieldsForRedline(rDoc.getIDocumentFieldsAccess()); // after footnotes - // update SwPostItMgr / notes in the margin - rDoc.GetDocShell()->Broadcast( + const SwTextNode *pTextNode = rPam.GetPointNode().GetTextNode(); + SwTextAttr* pTextAttr = pTextNode ? pTextNode->GetFieldTextAttrAt(rPam.GetPoint()->GetContentIndex() - 1, ::sw::GetTextAttrMode::Default) : nullptr; + SwTextField *const pTextField(static_txtattr_cast<SwTextField*>(pTextAttr)); + if (pTextField && comphelper::LibreOfficeKit::isActive() ) + rDoc.GetDocShell()->Broadcast( + SwFormatFieldHint(&pTextField->GetFormatField(), SwFormatFieldHintWhich::INSERTED)); + else + rDoc.GetDocShell()->Broadcast( SwFormatFieldHint(nullptr, SwFormatFieldHintWhich::INSERTED) ); } diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx index b8bb35056de1..a629d9d6b432 100644 --- a/sw/source/core/doc/docredln.cxx +++ b/sw/source/core/doc/docredln.cxx @@ -1372,6 +1372,22 @@ void SwRedlineData::dumpAsXml(xmlTextWriterPtr pWriter) const sal_uInt32 SwRangeRedline::s_nLastId = 1; +namespace +{ +void lcl_LOKBroadcastCommentOperation(RedlineType type, const SwPaM& rPam) +{ + if (comphelper::LibreOfficeKit::isActive()) + { + auto eHintType = RedlineType::Delete == type ? SwFormatFieldHintWhich::REDLINED_DELETION: SwFormatFieldHintWhich::INSERTED; + const SwTextNode *pTextNode = rPam.GetPointNode().GetTextNode(); + SwTextAttr* pTextAttr = pTextNode ? pTextNode->GetFieldTextAttrAt(rPam.GetPoint()->GetContentIndex() - 1, ::sw::GetTextAttrMode::Default) : nullptr; + SwTextField *const pTextField(static_txtattr_cast<SwTextField*>(pTextAttr)); + if (pTextField) + const_cast<SwFormatField&>(pTextField->GetFormatField()).Broadcast(SwFormatFieldHint(&pTextField->GetFormatField(), eHintType)); + } +} +} // anonymous namespace + SwRangeRedline::SwRangeRedline(RedlineType eTyp, const SwPaM& rPam, sal_uInt32 nMovedID ) : SwPaM( *rPam.GetMark(), *rPam.GetPoint() ), m_pRedlineData( new SwRedlineData(eTyp, GetDoc().getIDocumentRedlineAccess().GetRedlineAuthor(), nMovedID ) ) @@ -1393,15 +1409,7 @@ SwRangeRedline::SwRangeRedline(RedlineType eTyp, const SwPaM& rPam, sal_uInt32 n ? SwResId(STR_REDLINE_COMMENT_DELETED) : SwResId(STR_REDLINE_COMMENT_ADDED) ); - if (comphelper::LibreOfficeKit::isActive()) - { - auto eHintType = RedlineType::Delete == eTyp ? SwFormatFieldHintWhich::REDLINED_DELETION: SwFormatFieldHintWhich::INSERTED; - const SwTextNode *pTextNode = rPam.GetPointNode().GetTextNode(); - SwTextAttr* pTextAttr = pTextNode ? pTextNode->GetFieldTextAttrAt(rPam.GetPoint()->GetContentIndex() - 1, ::sw::GetTextAttrMode::Default) : nullptr; - SwTextField *const pTextField(static_txtattr_cast<SwTextField*>(pTextAttr)); - if (pTextField) - const_cast<SwFormatField&>(pTextField->GetFormatField()).Broadcast(SwFormatFieldHint(&pTextField->GetFormatField(), eHintType)); - } + lcl_LOKBroadcastCommentOperation(eTyp, rPam); } } @@ -1417,6 +1425,16 @@ SwRangeRedline::SwRangeRedline( const SwRedlineData& rData, const SwPaM& rPam ) m_bIsVisible = true; if( !rPam.HasMark() ) DeleteMark(); + + // set default comment for single annotations added or deleted + if ( IsAnnotation() ) + { + SetComment( RedlineType::Delete == rData.m_eType + ? SwResId(STR_REDLINE_COMMENT_DELETED) + : SwResId(STR_REDLINE_COMMENT_ADDED) ); + + lcl_LOKBroadcastCommentOperation(rData.m_eType, rPam); + } } SwRangeRedline::SwRangeRedline( const SwRedlineData& rData, const SwPosition& rPos ) |