diff options
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 25 | ||||
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 3 | ||||
-rw-r--r-- | sw/source/core/layout/wsfrm.cxx | 15 |
3 files changed, 42 insertions, 1 deletions
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 675e6cc1530b..4ea139ee0c3d 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -177,6 +177,7 @@ public: void testTdf77014(); void testTdf92648(); void testTdf96515(); + void testTdf96536(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -260,6 +261,7 @@ public: CPPUNIT_TEST(testTdf77014); CPPUNIT_TEST(testTdf92648); CPPUNIT_TEST(testTdf96515); + CPPUNIT_TEST(testTdf96536); CPPUNIT_TEST_SUITE_END(); private: @@ -2941,6 +2943,29 @@ void SwUiWriterTest::testTdf96515() CPPUNIT_ASSERT_EQUAL(1, getPages()); } +void SwUiWriterTest::testTdf96536() +{ + // Enable hide whitespace mode. + SwDoc* pDoc = createDoc(); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + SwViewOption aViewOptions(*pWrtShell->GetViewOptions()); + aViewOptions.SetHideWhitespaceMode(true); + pWrtShell->ApplyViewOptions(aViewOptions); + + // Insert a new paragraph at the end of the document, and then delete it. + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XParagraphAppend> xParagraphAppend(xTextDocument->getText(), uno::UNO_QUERY); + xParagraphAppend->finishParagraph(uno::Sequence<beans::PropertyValue>()); + calcLayout(); + uno::Reference<lang::XComponent> xParagraph(getParagraph(2), uno::UNO_QUERY); + xParagraph->dispose(); + calcLayout(); + + // This was 552, page did not shrink after deleting the second paragraph. + // 276 is 12pt font size + default line spacing (15%). + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(276), parseDump("/root/infos/bounds", "height").toInt32()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index 922041702f1e..21d479a79131 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -1522,7 +1522,8 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) const long nPrtBottom = (GetUpper()->*fnRect->fnGetPrtBottom)(); long nBottomDist = (Frame().*fnRect->fnBottomDist)(nPrtBottom); - if (getRootFrame()->GetCurrShell()->GetViewOptions()->IsWhitespaceHidden()) + SwViewShell* pShell = getRootFrame()->GetCurrShell(); + if (pShell && pShell->GetViewOptions()->IsWhitespaceHidden()) { // When whitespace is hidden, the page frame has two heights: the // nominal (defined by the frame format), and the actual (which is diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx index edd660df2471..0f60476f84ce 100644 --- a/sw/source/core/layout/wsfrm.cxx +++ b/sw/source/core/layout/wsfrm.cxx @@ -2358,6 +2358,21 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) const SwViewShell *pSh = getRootFrame()->GetCurrShell(); const bool bBrowse = pSh && pSh->GetViewOptions()->getBrowseMode(); const sal_uInt16 nTmpType = bBrowse ? 0x2084: 0x2004; //Row+Cell, Browse by Body. + + if (pSh && pSh->GetViewOptions()->IsWhitespaceHidden()) + { + if (IsBodyFrame()) + { + // Whitespace is hidden and this body frame will not shrink, as it + // has a fix size. + // Invalidate the page frame size, so in case the reason for the + // shrink was that there is more whitespace on this page, the size + // without whitespace will be recalculated correctly. + SwPageFrame* pPageFrame = FindPageFrame(); + pPageFrame->InvalidateSize(); + } + } + if( !(GetType() & nTmpType) && HasFixSize() ) return 0; |