diff options
Diffstat (limited to 'sw/source/core/layout/calcmove.cxx')
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 29 |
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 ) |