summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/layout/data/tdf150606-1-min.odtbin0 -> 52456 bytes
-rw-r--r--sw/qa/extras/layout/layout.cxx65
-rw-r--r--sw/source/core/layout/fly.cxx6
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
new file mode 100644
index 000000000000..63bd1ceb0a5b
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf150606-1-min.odt
Binary files differ
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();