summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-09-28 13:28:13 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-09-28 13:31:18 +0100
commitf06508e2cfa7e833862b7e9ff3b2f79181672275 (patch)
tree844a9faedfe4e90410239365fcbbf43b0767e8d5
parent5ba0f79e246ea970d16f366640c2ccd87e1d8786 (diff)
Resolves: tdf#93461 captions laid out behind images
regression from... commit 8a08f68669f9acfe98dadcca4af6519164a17000 Author: Mike <mikekaganski@hotmail.com> Date: Mon Apr 27 01:27:05 2015 +1000 tdf#66141: SwTxtFrm::FormatQuick(bool) endless loop If a line happens to be invisible (e.g. in too thin cell of a table) then aLine.FormatLine(nStart) returns nStart, and aLine.Insert( new SwLineLayout() ) is executed until OOM. keep the zero advance loop detection attempt, but allow the first insertion and disallow subsequent inserts Change-Id: I16380588220149cfd0ed0f835f08d2849180fece
-rw-r--r--sw/source/core/text/frmform.cxx15
1 files changed, 11 insertions, 4 deletions
diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index 35876fc74103..f85215dc78f6 100644
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -1894,14 +1894,21 @@ bool SwTextFrm::FormatQuick( bool bForceQuickFormat )
sal_Int32 nStart = GetOfst();
const sal_Int32 nEnd = GetFollow()
? GetFollow()->GetOfst() : aInf.GetText().getLength();
+
+ bool bPreviousLayoutWasZeroWidth = false;
do
{
- sal_Int32 nShift = aLine.FormatLine(nStart) - nStart;
- nStart += nShift;
- if ((nShift != 0) // Check for special case: line is invisible,
- // like in too thin table cell: tdf#66141
+ sal_Int32 nNewStart = aLine.FormatLine(nStart);
+ // Check for special case: line is invisible,
+ // like in too thin table cell: tdf#66141
+ bool bThisLayoutIsZeroWidth = (nNewStart == nStart);
+ nStart = nNewStart;
+ bool bWillEndlessInsert = (bPreviousLayoutWasZeroWidth && bThisLayoutIsZeroWidth);
+ if ((!bWillEndlessInsert) // Check for special case: line is invisible,
+ // like in too thin table cell: tdf#66141
&& (aInf.IsNewLine() || (!aInf.IsStop() && nStart < nEnd)))
aLine.Insert( new SwLineLayout() );
+ bPreviousLayoutWasZeroWidth = bThisLayoutIsZeroWidth;
} while( aLine.Next() );
// Last exit: the heights need to match