summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2020-10-02 12:55:04 +0200
committerLászló Németh <nemeth@numbertext.org>2020-10-02 16:24:32 +0200
commitc37f2b927715ebbeffcc1d7a1e9d646f1611c4ec (patch)
tree9f9c9be2938813f60b8479c74323c46f48c89572 /writerfilter/source/dmapper
parente31474d71235bccee8568c4a952a8319bddf39e0 (diff)
tdf#136850 DOCX: fix change tracking in floating tables
Deleted text still reappeared as normal text in floating tables in the case of combination with tracked paragraph property changes. Follow-up of commit 288db6eb47fbbd2b3ca34ffea0686d8ed8ed9be9 (tdf#132271 DOCX: import change tracking in floating tables) and commit 464a7b0631335a8f8729512b8c27f864747f56a7 (tdf#136667 DOCX import: fix crash of floating tables). Change-Id: I2c8f63054520ce28306c063ef638756f7d8342e9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103832 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter/source/dmapper')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx18
1 files changed, 16 insertions, 2 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index cd985e4fd995..cd78ab36bd0a 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -6809,11 +6809,12 @@ void DomainMapper_Impl::ExecuteFrameConversion()
{
if( m_xFrameStartRange.is() && m_xFrameEndRange.is() && !m_bDiscardHeaderFooter )
{
+ std::vector<sal_Int32> redPos, redLen;
try
{
uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( GetTopTextAppend(), uno::UNO_QUERY_THROW );
// convert redline ranges to cursor movement and character length
- std::vector<sal_Int32> redPos, redLen;
+
for( size_t i = 0; i < aFramedRedlines.size(); i+=3)
{
uno::Reference< text::XTextRange > xRange;
@@ -6863,7 +6864,20 @@ void DomainMapper_Impl::ExecuteFrameConversion()
}
m_bIsActualParagraphFramed = false;
- aFramedRedlines.clear();
+
+ if (redPos.size() == aFramedRedlines.size()/3)
+ {
+ for( sal_Int32 i = aFramedRedlines.size() - 1; i >= 0; --i)
+ {
+ // keep redlines of floating tables to process them in CloseSectionGroup()
+ if ( redPos[i/3] != -1 )
+ {
+ aFramedRedlines.erase(aFramedRedlines.begin() + i);
+ }
+ }
+ }
+ else
+ aFramedRedlines.clear();
}
m_xFrameStartRange = nullptr;
m_xFrameEndRange = nullptr;