diff options
author | László Németh <nemeth@numbertext.org> | 2021-11-16 16:08:57 +0100 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2021-11-17 20:05:46 +0100 |
commit | f51fa7534421a195a58b4a737a2e836d8c25ba81 (patch) | |
tree | d0e7e23fead69543f388731e79769e9c0d9fe6c9 /writerfilter/source | |
parent | 9acb80943da5aaaf5d515a794f8a825d88bda430 (diff) |
tdf#145718 sw, DOCX import: complete tracked text moving
Add IsMoved bit to SwRangeRedline, and keep it in both
parts of a split Delete/Insert redline. Set this bit
during DOCX import, fixing incomplete import of
moveFrom/moveTo elements.
Details:
- Search text moving only at redline Insert() and AppendRedline()
instead in the layout code (which was much slower, because
triggered by also mouse hovering):
- detect text moving in Hide Changes mode, too;
- Insertion inside or directly after tracked text moving keeps
"moved text" layout of the original moved text parts (before
and after the insertion).
- at detection of text moving, invalidate (update) layout of the
redline pair, too.
- fix DOCX import: extend makeRedline() with property RedlineMoved
to keep all moveFrom/moveTo stored in DOCX instead of
losing them (joining them with normal redlines) in the case
of missing Delete/Insert pair (see unit test document);
Follow-up to commit ec577f566fa3e6d2666069180f8ec8474054aea9
"tdf#145233 sw track changes: show moved text in green color",
commit bcdebc832b272662d28035007a4796e42d1305ae
"tdf#104797 DOCX change tracking: handle moveFrom and moveTo"
and commit d32d9a2b3c5e3963f4a18f6c7bbf50fab2e9b2be
"tdf#123460 DOCX track changes: moveFrom completely".
Change-Id: Iaca80e5e326a172bc7ba5fec64b63668b9378e2d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125317
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter/source')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index c42a085bfa87..b52969e300a7 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -3039,6 +3039,7 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR if ( !pRedline ) return; + bool bRedlineMoved = false; try { OUString sType; @@ -3048,10 +3049,13 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR sType = getPropertyName( PROP_FORMAT ); break; case XML_moveTo: + bRedlineMoved = true; + [[fallthrough]]; case XML_ins: sType = getPropertyName( PROP_INSERT ); break; case XML_moveFrom: + bRedlineMoved = true; m_pParaMarkerRedlineMoveFrom = pRedline.get(); [[fallthrough]]; case XML_del: @@ -3063,7 +3067,7 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR default: throw lang::IllegalArgumentException("illegal redline token type", nullptr, 0); } - beans::PropertyValues aRedlineProperties( 3 ); + beans::PropertyValues aRedlineProperties( 4 ); beans::PropertyValue * pRedlineProperties = aRedlineProperties.getArray( ); pRedlineProperties[0].Name = getPropertyName( PROP_REDLINE_AUTHOR ); pRedlineProperties[0].Value <<= pRedline->m_sAuthor; @@ -3071,6 +3075,9 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR pRedlineProperties[1].Value <<= ConversionHelper::ConvertDateStringToDateTime( pRedline->m_sDate ); pRedlineProperties[2].Name = getPropertyName( PROP_REDLINE_REVERT_PROPERTIES ); pRedlineProperties[2].Value <<= pRedline->m_aRevertProperties; + pRedlineProperties[3].Name = "RedlineMoved"; + pRedlineProperties[3].Value <<= bRedlineMoved; + if (!m_bIsActualParagraphFramed) { uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW ); |