diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-01-10 00:43:12 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-01-10 00:58:45 +0100 |
commit | e521930ea1c855c236efb67793e540d07c201d35 (patch) | |
tree | 2721e41deb95b39fd2739d248befb864cc72cd88 | |
parent | b05250de08f5dad8c6ac1d86d0c63981d800744f (diff) |
fdo#58327: writerfilter: RemoveLastParagraph is tricky:
What happens here is that the xCursor->goLeft( 1, true ) selects the
entire inserted table, which is then deleted. That causes annoyances,
such as an assertion from ~SwIndexReg because as collateral damage the
SwTxtNode that SwReader::Read's pUndoPam points to is also deleted, as
well as missing tables in the document.
DomainMapper_Impl::RemoveLastParagraph() can avoid this by not using
setString() but instead disposing the paragraph, like it already does in
other cases. But don't do it for new (loaded) documents, because it may
kill flys in that case, which i strangely couldn't reproduce when
pasting as RTF.
Change-Id: I87302b8916e39ca42bc4fedfee40ac38fadd0939
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 8716c0d54cc8..3ec9f5c026f4 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -282,7 +282,13 @@ void DomainMapper_Impl::RemoveLastParagraph( ) // Keep the character properties of the last but one paragraph, even if // it's empty. This works for headers/footers, and maybe in other cases // as well, but surely not in textboxes. - if (m_bInHeaderFooterImport && xEnumerationAccess.is()) + // fdo#58327: also do this at the end of the document: when pasting, + // a table before the cursor position would be deleted + // (but only for paste/insert, not load; otherwise it can happen that + // flys anchored at the disposed paragraph are deleted (fdo47036.rtf)) + bool const bEndOfDocument(m_aTextAppendStack.size() == 1); + if ((m_bInHeaderFooterImport || (bEndOfDocument && !m_bIsNewDoc)) + && xEnumerationAccess.is()) { uno::Reference<container::XEnumeration> xEnumeration = xEnumerationAccess->createEnumeration(); uno::Reference<lang::XComponent> xParagraph(xEnumeration->nextElement(), uno::UNO_QUERY); |