dev/null |binary sw/qa/extras/uiwriter/uiwriter.cxx | 28 --------------- sw/source/core/layout/findfrm.cxx | 8 ---- sw/source/core/layout/flowfrm.cxx | 9 +--- sw/source/core/layout/tabfrm.cxx | 67 +++++++++---------------------------- 5 files changed, 21 insertions(+), 91 deletions(-)
New commits: commit f15146021b722dda0cf10cb08de6e0a3c525168a Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Mar 26 00:48:12 2019 +0100 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Apr 5 15:42:32 2019 +0200 tdf#114306: Revert commits fixing this issue ( 6.1 only ) Revert "tdf#114306 fix crash caused by special document 2" This reverts commit d30eefb677b446886f7b5bab6de93d489ba63529. Revert "tdf#114306 fix crash caused by special document" This reverts commit e4400f4c4e267f8528df3a7d5a09623c888bd10c. Revert "tdf#114306 fix unexpected page break in row-spanned table" This reverts commit 18765b9fa739337d2d891513f6e2fb7c3ce23b50 Change-Id: Ifff799616f12ee428a3f923f6510b20059f5bc71 Reviewed-on: https://gerrit.libreoffice.org/69848 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> diff --git a/sw/qa/extras/uiwriter/data/fdo114306.odt b/sw/qa/extras/uiwriter/data/fdo114306.odt deleted file mode 100755 index 5a7d2f9ca864..000000000000 Binary files a/sw/qa/extras/uiwriter/data/fdo114306.odt and /dev/null differ diff --git a/sw/qa/extras/uiwriter/data/fdo114306_2.odt b/sw/qa/extras/uiwriter/data/fdo114306_2.odt deleted file mode 100755 index b4bebc58add5..000000000000 Binary files a/sw/qa/extras/uiwriter/data/fdo114306_2.odt and /dev/null differ diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 6d1f2c51c684..8d0e194d7a65 100755 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -332,8 +332,6 @@ public: void testTdf112448(); void testTdf113790(); void testTdf108048(); - void testTdf114306(); - void testTdf114306_2(); void testTdf113481(); void testTdf115013(); void testTdf114536(); @@ -528,8 +526,6 @@ public: CPPUNIT_TEST(testTdf112448); CPPUNIT_TEST(testTdf113790); CPPUNIT_TEST(testTdf108048); - CPPUNIT_TEST(testTdf114306); - CPPUNIT_TEST(testTdf114306_2); CPPUNIT_TEST(testTdf113481); CPPUNIT_TEST(testTdf115013); CPPUNIT_TEST(testTdf114536); @@ -5482,30 +5478,6 @@ void SwUiWriterTest::testTdf72942() CPPUNIT_ASSERT_EQUAL(OUString("Liberation Sans"), getProperty<OUString>(xRun4, "CharFontName")); } -void SwUiWriterTest::testTdf114306() -{ - load(DATA_DIRECTORY, "fdo114306.odt"); - xmlDocPtr pXmlDoc = parseLayoutDump(); - - // There are 2 long paragraphs in cell A1. - // A part of paragraph 2 should flow over to the second page but - // *not* the whole paragraph. There should be 2 paragraphs on - // page 1 and 1 paragraph on page 2. - assertXPath(pXmlDoc, "/root/page[1]/body/tab[1]/row[1]/cell[1]/txt", 2); - assertXPath(pXmlDoc, "/root/page[2]/body/tab[1]/row[1]/cell[1]/txt", 1); -} - -void SwUiWriterTest::testTdf114306_2() -{ - // tdf#114306 fix unexpected page break in row-spanned table - // load regression document without writer crash - load(DATA_DIRECTORY, "fdo114306_2.odt"); - - // correct number of pages - CPPUNIT_ASSERT_EQUAL(4, getPages()); -} - - // During insert of the document with list inside into the main document inside the list // we should merge both lists into one, when they have the same list properties void SwUiWriterTest::testTdf113877() diff --git a/sw/source/core/layout/findfrm.cxx b/sw/source/core/layout/findfrm.cxx index b720d9936a45..c327ebfcab2c 100644 --- a/sw/source/core/layout/findfrm.cxx +++ b/sw/source/core/layout/findfrm.cxx @@ -1340,14 +1340,8 @@ bool SwFrame::IsMoveable( const SwLayoutFrame* _pLayoutFrame ) const _pLayoutFrame->IsInDocBody() || _pLayoutFrame->IsInFootnote() ) { - // If IsMovable() is called before a MoveFwd() the method - // may return false if there is no NextCellLeaf. If - // IsMovable() is called before a MoveBwd() the method may - // return false if there is no PrevCellLeaf. if ( _pLayoutFrame->IsInTab() && !IsTabFrame() && - ( !IsContentFrame() || (!const_cast<SwFrame*>(this)->GetNextCellLeaf() - && !const_cast<SwFrame*>(this)->GetPrevCellLeaf()) ) - ) + ( !IsContentFrame() || !const_cast<SwFrame*>(this)->GetNextCellLeaf() ) ) { bRetVal = false; } diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx index 4366c98af710..34a3258e68b4 100644 --- a/sw/source/core/layout/flowfrm.cxx +++ b/sw/source/core/layout/flowfrm.cxx @@ -2041,19 +2041,14 @@ bool SwFlowFrame::MoveBwd( bool &rbReformat ) const SwLayoutFrame* pUpperFrame = m_rThis.GetUpper(); while ( pUpperFrame ) { - if ( pUpperFrame->IsTabFrame() || pUpperFrame->IsRowFrame() ) + if ( pUpperFrame->IsTabFrame() ) { return false; } // If the text frame is a follow-section-in-table, that can move // backward as well. bool bIsFollowSection = pUpperFrame->IsSctFrame() && static_cast<const SwSectionFrame*>(pUpperFrame)->GetPrecede(); - - // If the text frame is a follow-in-table, that can move - // backward as well. - bool bIsFollow = const_cast<SwLayoutFrame*>(pUpperFrame)->GetPrevCellLeaf(); - - if ( ( pUpperFrame->IsColumnFrame() && pUpperFrame->IsInSct() ) || bIsFollowSection || bIsFollow ) + if ( ( pUpperFrame->IsColumnFrame() && pUpperFrame->IsInSct() ) || bIsFollowSection ) { break; } diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index 8e3d9b1d93c3..d50e8211f492 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -164,7 +164,7 @@ void SwTabFrame::RegistFlys() } void SwInvalidateAll( SwFrame *pFrame, long nBottom ); -static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ); +static void lcl_RecalcRow( SwRowFrame& rRow, long nBottom ); static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, long lYStart, bool bInva ); // #i26945# - add parameter <_bOnlyRowsAndCells> to control // that only row and cell frames are formatted. @@ -290,7 +290,7 @@ static void lcl_InvalidateLowerObjs( SwLayoutFrame& _rLayoutFrame, } } -// Local helper function to shrink all lowers of pRow to 0 height +// Local helper function to shrink all lowers of rRow to 0 height static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) { SwCellFrame* pCurrMasterCell = static_cast<SwCellFrame*>(rRow.Lower()); @@ -682,7 +682,7 @@ static bool lcl_RecalcSplitLine( SwRowFrame& rLastLine, SwRowFrame& rFollowLine, rLastLine.SetInSplit(); // Do the recalculation - lcl_RecalcRow( &rLastLine, LONG_MAX ); + lcl_RecalcRow( rLastLine, LONG_MAX ); // #115759# - force a format of the last line in order to // get the correct height. rLastLine.InvalidateSize(); @@ -1567,8 +1567,7 @@ static bool lcl_InnerCalcLayout( SwFrame *pFrame, return bRet; } -// returns false if pRow is invalid -static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ) +static void lcl_RecalcRow( SwRowFrame& rRow, long nBottom ) { // FME 2007-08-30 #i81146# new loop control int nLoopControlRuns_1 = 0; @@ -1582,14 +1581,14 @@ static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ) int nLoopControlRuns_2 = 0; sal_uInt16 nLoopControlStage_2 = 0; - while( lcl_InnerCalcLayout( pRow, nBottom ) ) + while( lcl_InnerCalcLayout( &rRow, nBottom ) ) { if ( ++nLoopControlRuns_2 > nLoopControlMax ) { SAL_WARN_IF(nLoopControlStage_2 == 0, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 1!"); SAL_WARN_IF(nLoopControlStage_2 == 1, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 2!!"); SAL_WARN_IF(nLoopControlStage_2 >= 2, "sw.layout", "LoopControl_2 in lcl_RecalcRow: Stage 3!!!"); - pRow->ValidateThisAndAllLowers( nLoopControlStage_2++ ); + rRow.ValidateThisAndAllLowers( nLoopControlStage_2++ ); nLoopControlRuns_2 = 0; if( nLoopControlStage_2 > 2 ) break; @@ -1602,39 +1601,14 @@ static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ) { // #115759# - force another format of the // lowers, if at least one of it was invalid. - - // tdf#114306 writer may crash because pRow points to a deleted SwRowFrame - SwRowFrame* pOriginalRow = pRow; - OSL_ENSURE(pOriginalRow->GetUpper() && pOriginalRow->GetUpper()->IsTabFrame(), "No table"); - SwTabFrame* pOriginalTab = static_cast<SwTabFrame*>(pRow->GetUpper()); - - bCheck = SwContentFrame::CalcLowers( pRow, pRow->GetUpper(), nBottom, true ); - - bool bRowStillExists = false; - SwFrame* pTestRow = pOriginalTab->Lower(); - - while (pTestRow) - { - if (pTestRow == pRow) - { - bRowStillExists = true; - break; - } - pTestRow = pTestRow->GetNext(); - } - - if (!bRowStillExists) - { - SAL_WARN("sw.layout", "no row anymore at " << pRow); - return false; - } + bCheck = SwContentFrame::CalcLowers( &rRow, rRow.GetUpper(), nBottom, true ); // NEW TABLES // First we calculate the cells with row span of < 1, afterwards // all cells with row span of > 1: for ( int i = 0; i < 2; ++i ) { - SwCellFrame* pCellFrame = static_cast<SwCellFrame*>(pRow->Lower()); + SwCellFrame* pCellFrame = static_cast<SwCellFrame*>(rRow.Lower()); while ( pCellFrame ) { const bool bCalc = 0 == i ? @@ -1660,7 +1634,7 @@ static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ) SAL_WARN_IF(nLoopControlStage_1 == 0, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 1!"); SAL_WARN_IF(nLoopControlStage_1 == 1, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 2!!"); SAL_WARN_IF(nLoopControlStage_1 >= 2, "sw.layout", "LoopControl_1 in lcl_RecalcRow: Stage 3!!!"); - pRow->ValidateThisAndAllLowers( nLoopControlStage_1++ ); + rRow.ValidateThisAndAllLowers( nLoopControlStage_1++ ); nLoopControlRuns_1 = 0; if( nLoopControlStage_1 > 2 ) break; @@ -1670,8 +1644,7 @@ static bool lcl_RecalcRow( SwRowFrame* pRow, long nBottom ) } } break; - } while (true); - return true; + } while( true ); } static void lcl_RecalcTable( SwTabFrame& rTab, @@ -1686,7 +1659,7 @@ static void lcl_RecalcTable( SwTabFrame& rTab, rNotify.SetLowersComplete( true ); } ::SwInvalidatePositions( pFirstRow, LONG_MAX ); - lcl_RecalcRow( static_cast<SwRowFrame*>(pFirstRow), LONG_MAX ); + lcl_RecalcRow( static_cast<SwRowFrame&>(*pFirstRow), LONG_MAX ); } } @@ -2152,7 +2125,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) { ::SwInvalidateAll( pLastLine, LONG_MAX ); SetRebuildLastLine( true ); - lcl_RecalcRow( static_cast<SwRowFrame*>(pLastLine), LONG_MAX ); + lcl_RecalcRow( static_cast<SwRowFrame&>(*pLastLine), LONG_MAX ); SetRebuildLastLine( false ); } @@ -2278,7 +2251,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) } else if (m_bONECalcLowers) { - lcl_RecalcRow( static_cast<SwRowFrame*>(Lower()), LONG_MAX ); + lcl_RecalcRow( static_cast<SwRowFrame&>(*Lower()), LONG_MAX ); m_bONECalcLowers = false; } } @@ -2301,7 +2274,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) } else if (m_bONECalcLowers) { - lcl_RecalcRow( static_cast<SwRowFrame*>(Lower()), LONG_MAX ); + lcl_RecalcRow( static_cast<SwRowFrame&>(*Lower()), LONG_MAX ); m_bONECalcLowers = false; } @@ -2358,7 +2331,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) // 1. Try: bTryToSplit = true => Try to split the row. // 2. Try: bTryToSplit = false => Split the table between the rows. - if ((pFirstNonHeadlineRow && pFirstNonHeadlineRow->GetNext()) || bTryToSplit ) + if ( pFirstNonHeadlineRow->GetNext() || bTryToSplit ) { SwTwips nDeadLine = aRectFnSet.GetPrtBottom(*GetUpper()); if( IsInSct() || GetUpper()->IsInTab() ) // TABLE IN TABLE) @@ -2367,11 +2340,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) { SetInRecalcLowerRow( true ); - SwRowFrame* pRow = static_cast<SwRowFrame*>(Lower()); - if (!lcl_RecalcRow(pRow, nDeadLine)) - { - pFirstNonHeadlineRow = GetFirstNonHeadlineRow(); - } + ::lcl_RecalcRow( static_cast<SwRowFrame&>(*Lower()), nDeadLine ); SetInRecalcLowerRow( false ); } m_bLowersFormatted = true; @@ -2471,7 +2440,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) // to nDeadLine may not be enough. if ( bSplitError && bTryToSplit ) // no restart if we did not try to split: i72847, i79426 { - lcl_RecalcRow( static_cast<SwRowFrame*>(Lower()), LONG_MAX ); + lcl_RecalcRow( static_cast<SwRowFrame&>(*Lower()), LONG_MAX ); setFrameAreaPositionValid(false); bTryToSplit = false; continue; @@ -2512,7 +2481,7 @@ void SwTabFrame::MakeAll(vcl::RenderContext* pRenderContext) // its content. const bool bOldJoinLock = GetFollow()->IsJoinLocked(); GetFollow()->LockJoin(); - ::lcl_RecalcRow( static_cast<SwRowFrame*>(GetFollow()->Lower()), + ::lcl_RecalcRow( static_cast<SwRowFrame&>(*GetFollow()->Lower()), fnRectX.GetBottom(GetFollow()->GetUpper()->getFrameArea()) ); // #i43913# // #i63632# Do not unlock the _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits