[Libreoffice-commits] core.git: sw/source

Xisco Fauli anistenis at gmail.com
Tue Feb 16 10:45:19 UTC 2016


 sw/source/core/frmedt/fecopy.cxx |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

New commits:
commit 3f7a0f7dba759ed3763c900112b5eeb7ccfdd84d
Author: Xisco Fauli <anistenis at gmail.com>
Date:   Thu Feb 4 22:50:47 2016 +0100

    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 at libreoffice.org>
    Reviewed-by: Xisco FaulĂ­ <anistenis at gmail.com>

diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index b40a0bfd..dc7939d 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-


More information about the Libreoffice-commits mailing list