[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - sw/qa sw/source
Patrick Jaap (via logerrit)
logerrit at kemper.freedesktop.org
Tue Sep 24 07:02:22 UTC 2019
sw/qa/extras/layout/data/tdf127235.odt |binary
sw/qa/extras/layout/layout.cxx | 9 +++++++++
sw/source/core/text/txtfly.cxx | 21 +++++++++++++++++++--
3 files changed, 28 insertions(+), 2 deletions(-)
New commits:
commit 1e9d08d046bfe362e5e2ffeb36e35692fc3b55f5
Author: Patrick Jaap <patrick.jaap at tu-dresden.de>
AuthorDate: Fri Sep 6 10:50:05 2019 +0200
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Sep 24 09:01:19 2019 +0200
tdf#127235 break if object is larger than page
We will always have an overlap if the object is larger than the whole page.
Look for the next page style: if it is missing or the same as the current,
we simply stop.
Change-Id: I699d5146d215f17b4775dbcb32811fa5b6ebf60d
Reviewed-on: https://gerrit.libreoffice.org/78696
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/79104
diff --git a/sw/qa/extras/layout/data/tdf127235.odt b/sw/qa/extras/layout/data/tdf127235.odt
new file mode 100644
index 000000000000..5b27c921cf17
Binary files /dev/null and b/sw/qa/extras/layout/data/tdf127235.odt differ
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index c2c6d2cd5b9d..ec568d69f767 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -67,6 +67,7 @@ public:
void testTdf122878();
void testTdf115094();
void testTdf118719();
+ void testTdf127235();
CPPUNIT_TEST_SUITE(SwLayoutWriter);
CPPUNIT_TEST(testRedlineFootnotes);
@@ -106,6 +107,7 @@ public:
CPPUNIT_TEST(testTdf122878);
CPPUNIT_TEST(testTdf115094);
CPPUNIT_TEST(testTdf118719);
+ CPPUNIT_TEST(testTdf127235);
CPPUNIT_TEST_SUITE_END();
private:
@@ -2728,6 +2730,13 @@ void SwLayoutWriter::testTdf118719()
CPPUNIT_ASSERT_GREATER(nOther, nLast);
}
+void SwLayoutWriter::testTdf127235()
+{
+ SwDoc* pDoc = createDoc("tdf127235.odt");
+ // This resulted in a layout loop.
+ pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout();
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwLayoutWriter);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx
index e16cd878ce75..18bec6284a57 100644
--- a/sw/source/core/text/txtfly.cxx
+++ b/sw/source/core/text/txtfly.cxx
@@ -998,6 +998,24 @@ bool SwTextFly::ForEach( const SwRect &rRect, SwRect* pRect, bool bAvoid ) const
{
SwSwapIfSwapped swap(const_cast<SwTextFrame *>(m_pCurrFrame));
+ // Optimization
+ SwRectFnSet aRectFnSet(m_pCurrFrame);
+
+ // tdf#127235 stop if the area is larger than the page
+ if( aRectFnSet.GetHeight(pPage->getFrameArea()) < aRectFnSet.GetHeight(rRect))
+ {
+ // get the doc model description
+ const SwPageDesc* pPageDesc = pPage->GetPageDesc();
+
+ // if there is no next page style or it is the same as the current
+ // => stop trying to place the frame (it would end in an infinite loop)
+ if( pPageDesc &&
+ ( !pPageDesc->GetFollow() || pPageDesc->GetFollow() == pPageDesc) )
+ {
+ return false;
+ }
+ }
+
bool bRet = false;
// #i68520#
const SwAnchoredObjList::size_type nCount( bOn ? GetAnchoredObjList()->size() : 0 );
@@ -1010,10 +1028,9 @@ bool SwTextFly::ForEach( const SwRect &rRect, SwRect* pRect, bool bAvoid ) const
SwRect aRect( pAnchoredObj->GetObjRectWithSpaces() );
- // Optimization
- SwRectFnSet aRectFnSet(m_pCurrFrame);
if( aRectFnSet.GetLeft(aRect) > aRectFnSet.GetRight(rRect) )
break;
+
// #i68520#
if ( mpCurrAnchoredObj != pAnchoredObj && aRect.IsOver( rRect ) )
{
More information about the Libreoffice-commits
mailing list