diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-07-06 11:16:54 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-07-06 12:41:32 +0200 |
commit | f8a76d218305a56d15b82b9dac4fafa558872780 (patch) | |
tree | a4ff18557e51b41b2e33c2b2e3b7785b9045570c /sw/qa | |
parent | 6a76b4c9c52ab9f4cd67fa9bf9468258f375dce2 (diff) |
tdf#108524 sw: split section frames inside table cells, non-split text frames
Commit f991b842addddeada6dc45c4054deeca5aa7f17b (tdf#108524 sw: attempt
to split section frames inside table cells, 2017-06-19) added initial
support for multi-page sections inside a table cell, but turns out this
only worked in case at the split point there was a long enough
paragraph, so it was split into two (a "master" text frame and a
"follow" one), and then the follow was moved to the next page by
SwContentFrame::MakeAll(), with the MoveFwd() call in the "If a Follow
sits next to its Master and doesn't fit, we know it can be moved right
now." block.
However, if the section contains lots of one-liner text frames, then all
of them are masters, so the above code doesn't move them to the next
page; so the section frame is still not split. Fix the problem by
allowing the move of frames inside table-in-sections in
SwSectionFrame::MoveAllowed(), that way SwTextFrame::AdjustFrame() will
not set the text frame as undersized, so at the end
SwContentFrame::MakeAll() will call MoveFwd() in the "If a column
section can't find any space for its first ContentFrame" block.
With this the split of text frames in section-in-table frames is
consistent regardless if they are of multiple or single lines.
Change-Id: Ief9d62da3fd8a5c707e1f9489a92f7a81e7b38ac
Reviewed-on: https://gerrit.libreoffice.org/39623
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'sw/qa')
-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 |
2 files changed, 18 insertions, 0 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. |