diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/core/data/rtf/pass/forcepoint-96.rtf | 8 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentContentOperationsManager.cxx | 31 |
2 files changed, 39 insertions, 0 deletions
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-96.rtf b/sw/qa/core/data/rtf/pass/forcepoint-96.rtf new file mode 100644 index 000000000000..1e5a05d4801f --- /dev/null +++ b/sw/qa/core/data/rtf/pass/forcepoint-96.rtf @@ -0,0 +1,8 @@ +{\rtf1 +\clvertalt +\chpgn +\clvertalb +\cell +\pard\intbl +\cellx279 +} diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index 5f4e0c3b7f29..cbd6380e9bde 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -2131,6 +2131,37 @@ bool DocumentContentOperationsManager::DelFullPara( SwPaM& rPam ) return false; } } + + // must delete all fieldmarks before CorrAbs(), or they'll remain + // moved to wrong node without their CH_TXT_ATR_FIELD* + // (note: deleteMarks() doesn't help here, in case of partially + // selected fieldmarks; let's delete these as re-inserting their chars + // elsewhere looks difficult) + ::std::set<::sw::mark::IFieldmark*> fieldmarks; + for (SwNodeIndex i = aRg.aStart; i <= aRg.aEnd; ++i) + { + if (SwTextNode *const pTextNode = i.GetNode().GetTextNode()) + { + for (sal_Int32 j = 0; j < pTextNode->GetText().getLength(); ++j) + { + switch (pTextNode->GetText()[j]) + { + case CH_TXT_ATR_FIELDSTART: + case CH_TXT_ATR_FIELDEND: + fieldmarks.insert(m_rDoc.getIDocumentMarkAccess()->getFieldmarkAt(SwPosition(*pTextNode, j))); + break; + case CH_TXT_ATR_FIELDSEP: + fieldmarks.insert(m_rDoc.getIDocumentMarkAccess()->getFieldmarkFor(SwPosition(*pTextNode, j))); + break; + } + } + } + } + for (auto const pFieldMark : fieldmarks) + { + m_rDoc.getIDocumentMarkAccess()->deleteMark(pFieldMark); + } + // move bookmarks, redlines etc. if (aRg.aStart == aRg.aEnd) // only first CorrAbs variant handles this { |