diff options
-rw-r--r-- | sw/qa/extras/layout/data/tdf150606-1-min.odt | bin | 0 -> 52456 bytes | |||
-rw-r--r-- | sw/qa/extras/layout/layout.cxx | 65 | ||||
-rw-r--r-- | sw/source/core/layout/fly.cxx | 6 |
3 files changed, 70 insertions, 1 deletions
diff --git a/sw/qa/extras/layout/data/tdf150606-1-min.odt b/sw/qa/extras/layout/data/tdf150606-1-min.odt Binary files differnew file mode 100644 index 000000000000..63bd1ceb0a5b --- /dev/null +++ b/sw/qa/extras/layout/data/tdf150606-1-min.odt diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 07f041faaf96..e985c62626a5 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -1145,6 +1145,71 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFlysInHeader) } } +#if !defined(MACOSX) +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf150606) +{ + createSwDoc("tdf150606-1-min.odt"); + + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page[1]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column", 2); + // on page 5 the table is split across balanced columns + assertXPath(pXmlDoc, "/root/page[5]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[5]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[5]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page", 5); + + pWrtShell->Down(false, 1); + dispatchCommand(mxComponent, ".uno:DeleteTable", {}); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page[1]/body/section/column/body/tab", 0); + assertXPath(pXmlDoc, "/root/page", 1); + + pWrtShell->Undo(); + Scheduler::ProcessEventsToIdle(); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + + assertXPath(pXmlDoc, "/root/page[1]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[1]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[2]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[3]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[4]/body/section/column", 2); + // on page 5 the table is split across balanced columns + // (problem was that there were empty pages and table was on page 10) + assertXPath(pXmlDoc, "/root/page[5]/body/section/column[1]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[5]/body/section/column[2]/body/tab", 1); + assertXPath(pXmlDoc, "/root/page[5]/body/section/column", 2); + assertXPath(pXmlDoc, "/root/page", 5); +} +#endif + CPPUNIT_TEST_FIXTURE(SwLayoutWriter, TestTdf137025) { // Check the padding of the textbox diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index 1d762012a111..d03e015f2c14 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -1822,8 +1822,12 @@ void CalcContent( SwLayoutFrame *pLay, bool bNoColl ) } if ( pFrame->IsTabFrame() ) { - if ( static_cast<SwTabFrame*>(pFrame)->IsFollow() ) + if (static_cast<SwTabFrame*>(pFrame)->m_bLockBackMove) + { + assert(static_cast<SwTabFrame*>(pFrame)->IsFollow()); static_cast<SwTabFrame*>(pFrame)->m_bLockBackMove = false; + pFrame->InvalidatePos(); + } } pFrame = bPrevInvalid ? pTmpPrev : pFrame->FindNext(); |