summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-01-10 00:43:12 +0100
committerMiklos Vajna <vmiklos@suse.cz>2013-01-10 11:00:24 +0100
commitdb67dad3065e3578f1321822ffb63eef83fe5377 (patch)
tree3fda3a56e2cb70c27df6719cd58e1f5ad80a6e17 /writerfilter/source
parent62dc5dfcf2af93a35beb96bebe63b7e8ac652fb5 (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 (cherry picked from commit e521930ea1c855c236efb67793e540d07c201d35) Signed-off-by: Miklos Vajna <vmiklos@suse.cz>
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index ef16af5edc5c..f8730b99e0a5 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -283,7 +283,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);