diff options
-rw-r--r-- | sw/qa/extras/uiwriter/data/lines-in-section-in-table.odt | bin | 0 -> 9396 bytes | |||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/layout/sectfrm.cxx | 6 |
3 files changed, 21 insertions, 3 deletions
diff --git a/sw/qa/extras/uiwriter/data/lines-in-section-in-table.odt b/sw/qa/extras/uiwriter/data/lines-in-section-in-table.odt Binary files differnew file mode 100644 index 000000000000..4f0abd6e5e88 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/lines-in-section-in-table.odt diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index c9b4efda6fad..b85a7e58e5b4 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -256,6 +256,7 @@ public: void testTdf107976(); void testTdf108524(); void testTableInSection(); + void testLinesInSectionInTable(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -399,6 +400,7 @@ public: CPPUNIT_TEST(testTdf107976); CPPUNIT_TEST(testTdf108524); CPPUNIT_TEST(testTableInSection); + CPPUNIT_TEST(testLinesInSectionInTable); CPPUNIT_TEST_SUITE_END(); private: @@ -4962,6 +4964,22 @@ void SwUiWriterTest::testTdf108524() assertXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell/section", 1); } +void SwUiWriterTest::testLinesInSectionInTable() +{ + // This is similar to testTdf108524(), but the page boundary now is not in + // the middle of a multi-line paragraph: the section only contains oneliner + // paragraphs instead. + createDoc("lines-in-section-in-table.odt"); + xmlDocPtr pXmlDoc = parseLayoutDump(); + // In total we expect two cells containing a section. + assertXPath(pXmlDoc, "/root/page/body/tab/row/cell/section", 2); + + assertXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell/section", 1); + // This was 0, section wasn't split, instead it was only on the first page + // and it was cut off. + assertXPath(pXmlDoc, "/root/page[2]/body/tab/row/cell/section", 1); +} + void SwUiWriterTest::testTableInSection() { // The document has a section, containing a table that spans over 2 pages. diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx index 331b4be8fc66..7288251dfd12 100644 --- a/sw/source/core/layout/sectfrm.cxx +++ b/sw/source/core/layout/sectfrm.cxx @@ -590,7 +590,7 @@ namespace } /// Checks if pFrame is in a table, which itself is in a section. - bool IsInTableInSection(SwFrame* pFrame) + bool IsInTableInSection(const SwFrame* pFrame) { if (!pFrame->IsInTab()) return false; @@ -2160,8 +2160,8 @@ bool SwSectionFrame::MoveAllowed( const SwFrame* pFrame) const return false; // Now it has to be examined whether there is a layout sheet wherein // a section Follow can be created - if( IsInTab() || ( !IsInDocBody() && FindFooterOrHeader() ) ) - return false; // It doesn't work in tables/headers/footers + if( IsInTableInSection(this) || ( !IsInDocBody() && FindFooterOrHeader() ) ) + return false; // It doesn't work in table-in-sections/headers/footers if( IsInFly() ) // In column based or chained frames return nullptr != const_cast<SwFrame*>(static_cast<SwFrame const *>(GetUpper()))->GetNextLeaf( MAKEPAGE_NONE ); return true; |