diff options
author | Xisco Fauli <anistenis@gmail.com> | 2016-02-04 22:50:47 +0100 |
---|---|---|
committer | Xisco Faulí <anistenis@gmail.com> | 2016-02-16 10:44:49 +0000 |
commit | 3f7a0f7dba759ed3763c900112b5eeb7ccfdd84d (patch) | |
tree | d81ac5e196e0dc2fa135015de0a69e99401ffdcb | |
parent | ce43d0ae9279edbf1ad108fe0d8325327a038d49 (diff) |
tdf#97429: Fix crash on print selected area
Regression from 9eb61489ee03486a7147acdf923eaf5e3f355183
Use DelFlyInRange to iterate over nodes' range
Change-Id: I219c7ec83eaa69990340d423dc34546131bb372c
Reviewed-on: https://gerrit.libreoffice.org/22129
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Xisco Faulí <anistenis@gmail.com>
-rw-r--r-- | sw/source/core/frmedt/fecopy.cxx | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index b40a0bfd5899..dc7939dfbdde 100644 --- a/sw/source/core/frmedt/fecopy.cxx +++ b/sw/source/core/frmedt/fecopy.cxx @@ -90,6 +90,7 @@ bool SwFEShell::Copy( SwDoc* pClpDoc, const OUString* pNewClpText ) // delete content if ClpDocument contains content SwNodeIndex aSttIdx( pClpDoc->GetNodes().GetEndOfExtras(), 2 ); + SwNodeIndex aEndNdIdx( *aSttIdx.GetNode().EndOfSectionNode() ); SwTextNode* pTextNd = aSttIdx.GetNode().GetTextNode(); if (!pTextNd || !pTextNd->GetText().isEmpty() || aSttIdx.GetIndex()+1 != pClpDoc->GetNodes().GetEndOfContent().GetIndex() ) @@ -102,11 +103,19 @@ bool SwFEShell::Copy( SwDoc* pClpDoc, const OUString* pNewClpText ) } // also delete surrounding FlyFrames if any - for( auto pFormat : *pClpDoc->GetSpzFrameFormats() ) + for( const auto pFly : *pClpDoc->GetSpzFrameFormats() ) { - SwFlyFrameFormat* pFly = static_cast<SwFlyFrameFormat*>(pFormat); - pClpDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFly ); + SwFormatAnchor const*const pAnchor = &pFly->GetAnchor(); + SwPosition const*const pAPos = pAnchor->GetContentAnchor(); + if (pAPos && + ((FLY_AT_PARA == pAnchor->GetAnchorId()) || + (FLY_AT_CHAR == pAnchor->GetAnchorId())) && + aSttIdx <= pAPos->nNode && pAPos->nNode <= aEndNdIdx ) + { + pClpDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFly ); + } } + pClpDoc->GetDocumentFieldsManager().GCFieldTypes(); // delete the FieldTypes // if a string was passed, copy it to the clipboard- |