tdf#131185 Prevent unnecessary SwapIn calls.
When the http response is 404 or something like
that we shouldn't retry the download embeded image
constantly. This causes libreoffice to short freezes.
Change-Id: I7381d04f12e9fbea961dd0e3333ea0d39aa93d14
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90102
Tested-by: Jenkins
Reviewed-by: Gülşah Köse <gulsah.kose@collabora.com>
diff --git a/sw/inc/ndgrf.hxx b/sw/inc/ndgrf.hxx
index 4bc6680..25b184c 100644
--- a/sw/inc/ndgrf.hxx
+++ b/sw/inc/ndgrf.hxx
@@ -39,7 +39,8 @@
std::unique_ptr<GraphicObject> mpReplacementGraphic;
tools::SvRef<sfx2::SvBaseLink> mxLink; ///< If graphics only as link then pointer is set.
Size mnGrfSize;
bool mbInSwapIn :1;
bool mbInSwapIn :1; // to avoid recursion in SwGrfNode::SwapIn
bool mbInBaseLinkSwapIn :1; // to avoid recursion in SwBaseLink::SwapIn
bool mbChangeTwipSize :1;
bool mbFrameInPaint :1; ///< To avoid Start-/EndActions in Paint via SwapIn.
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index b0c5a31..e73d19f3c 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -59,6 +59,7 @@
SwAttrSet const * pAutoAttr ) :
SwNoTextNode( rWhere, SwNodeType::Grf, pGrfColl, pAutoAttr ),
maGrfObj(),
mbInBaseLinkSwapIn(true),
// #i73788#
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( false )
@@ -75,6 +76,7 @@
SwAttrSet const * pAutoAttr ) :
SwNoTextNode( rWhere, SwNodeType::Grf, pGrfColl, pAutoAttr ),
maGrfObj(rGrfObj),
mbInBaseLinkSwapIn(true),
// #i73788#
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( false )
@@ -96,6 +98,7 @@
SwAttrSet const * pAutoAttr ) :
SwNoTextNode( rWhere, SwNodeType::Grf, pGrfColl, pAutoAttr ),
maGrfObj(),
mbInBaseLinkSwapIn(true),
// #i73788#
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( false )
@@ -440,13 +443,15 @@
if( pLink )
{
if( GraphicType::NONE == maGrfObj.GetType() ||
GraphicType::Default == maGrfObj.GetType() )
if( (GraphicType::NONE == maGrfObj.GetType() ||
GraphicType::Default == maGrfObj.GetType()) &&
mbInBaseLinkSwapIn)
{
// link was not loaded yet
if( pLink->SwapIn( bWaitForData ) )
{
bRet = true;
mbInBaseLinkSwapIn = false;
}
else if( GraphicType::Default == maGrfObj.GetType() )
{