[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Jan 11 06:23:44 PST 2016


 sw/qa/extras/uiwriter/uiwriter.cxx |   26 ++++++++++++++++++++++++++
 sw/source/core/layout/calcmove.cxx |    3 ++-
 sw/source/core/layout/wsfrm.cxx    |   15 +++++++++++++++
 3 files changed, 43 insertions(+), 1 deletion(-)

New commits:
commit d3584878aee1bee36e9cc18e58a75dbc95b3e283
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 16 15:41:38 2015 +0100

    tdf#96536 sw Hide Whitespace: shrink oversized page frames on para delete
    
    The body frame did get a request to shrink, but because it had fixed
    size, nothing happened. Trigger a recalc that does the right thing wrt.
    hidden whitespace.
    
    (cherry picked from commits 72f0067258fd7738217abd43452abe282e05c11b and
    af47b54d49355a003deda722b5d0112a7b746485)
    
    Conflicts:
    	sw/qa/extras/uiwriter/uiwriter.cxx
    
    Change-Id: I446978da8b33372c2ab30200b45b1bcec1dea7a0
    Reviewed-on: https://gerrit.libreoffice.org/21084
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index a31dc51..eea54df 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -174,6 +174,7 @@ public:
     void testTdf92648();
     void testTdf96515();
     void testTdf96479();
+    void testTdf96536();
 
     CPPUNIT_TEST_SUITE(SwUiWriterTest);
     CPPUNIT_TEST(testReplaceForward);
@@ -256,6 +257,7 @@ public:
     CPPUNIT_TEST(testTdf92648);
     CPPUNIT_TEST(testTdf96515);
     CPPUNIT_TEST(testTdf96479);
+    CPPUNIT_TEST(testTdf96536);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -3001,6 +3003,30 @@ void SwUiWriterTest::testTdf96479()
     }
 }
 
+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.
+    // Expected 276, which is 12pt font size + default line spacing (15%), but
+    // tolerate some difference to that.
+    CPPUNIT_ASSERT(parseDump("/root/infos/bounds", "height").toInt32() <= 276);
+}
+
 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 9220417..21d479a 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 edd660d..0f60476 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;
 


More information about the Libreoffice-commits mailing list