summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2021-11-16 16:08:57 +0100
committerLászló Németh <nemeth@numbertext.org>2021-11-17 20:05:46 +0100
commitf51fa7534421a195a58b4a737a2e836d8c25ba81 (patch)
treed0e7e23fead69543f388731e79769e9c0d9fe6c9 /writerfilter/source
parent9acb80943da5aaaf5d515a794f8a825d88bda430 (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.cxx9
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 );