summaryrefslogtreecommitdiff
path: root/sw/source/core/layout/calcmove.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/layout/calcmove.cxx')
-rw-r--r--sw/source/core/layout/calcmove.cxx29
1 files changed, 28 insertions, 1 deletions
diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx
index cac6574158d9..922041702f1e 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 )