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

Miklos Vajna vmiklos at collabora.co.uk
Wed Dec 23 08:20:24 PST 2015


 sw/qa/extras/uiwriter/uiwriter.cxx |   21 +++++++++++++++++++++
 sw/source/core/layout/calcmove.cxx |   29 ++++++++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 1 deletion(-)

New commits:
commit d4c6c90c3491cf37181b13c1b867ac67bb098f80
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 16 09:49:18 2015 +0100

    tdf#96515 sw Hide Whitespace: avoid creating unneeded page frames
    
    (cherry picked from commit 2c23d4ee1e1370b20560e47db7efaeaac1d94b26)
    
    Change-Id: I9b273543ccf2eaa87116c6e1475860e9e872c445
    Reviewed-on: https://gerrit.libreoffice.org/20740
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index c69f330..097b295 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -172,6 +172,7 @@ public:
     void testTdf87922();
     void testTdf77014();
     void testTdf92648();
+    void testTdf96515();
 
     CPPUNIT_TEST_SUITE(SwUiWriterTest);
     CPPUNIT_TEST(testReplaceForward);
@@ -252,6 +253,7 @@ public:
     CPPUNIT_TEST(testTdf87922);
     CPPUNIT_TEST(testTdf77014);
     CPPUNIT_TEST(testTdf92648);
+    CPPUNIT_TEST(testTdf96515);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -2883,6 +2885,25 @@ void SwUiWriterTest::testTdf92648()
     }
 }
 
+void SwUiWriterTest::testTdf96515()
+{
+    // 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.
+    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();
+
+    // This was 2, a new page was created for the new paragraph.
+    CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
 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 cac6574..9220417 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -1520,7 +1520,34 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         // Bottom(). This might happen with undersized TextFrames on the lower edge of a
         // multi-column section
         const long nPrtBottom = (GetUpper()->*fnRect->fnGetPrtBottom)();
-        const long nBottomDist =  (Frame().*fnRect->fnBottomDist)( nPrtBottom );
+        long nBottomDist = (Frame().*fnRect->fnBottomDist)(nPrtBottom);
+
+        if (getRootFrame()->GetCurrShell()->GetViewOptions()->IsWhitespaceHidden())
+        {
+            // When whitespace is hidden, the page frame has two heights: the
+            // nominal (defined by the frame format), and the actual (which is
+            // at most the nominal height, but can be smaller in case there is
+            // no content for the whole page).
+            // The layout size is the actual one, but we want to move the
+            // content frame to a new page only in case it doesn't fit the
+            // nominal size.
+            if (nBottomDist < 0)
+            {
+                // Content frame doesn't fit the actual size, check if it fits the nominal one.
+                SwPageFrame* pPageFrame = FindPageFrame();
+                const SwFrameFormat* pPageFormat = static_cast<const SwFrameFormat*>(pPageFrame->GetRegisteredIn());
+                const Size& rPageSize = pPageFormat->GetFrameSize().GetSize();
+                long nWhitespace = rPageSize.getHeight() - pPageFrame->Frame().Height();
+                if (nWhitespace > -nBottomDist)
+                {
+                    // It does: don't move it and invalidate our page frame so
+                    // that it gets a larger height.
+                    nBottomDist = 0;
+                    pPageFrame->InvalidateSize();
+                }
+            }
+        }
+
         if( nBottomDist >= 0 )
         {
             if ( bKeep && bMoveable )


More information about the Libreoffice-commits mailing list