[Libreoffice-commits] core.git: sw/source
Oliver-Rainer Wittmann
orw at apache.org
Sat May 11 12:53:33 PDT 2013
sw/source/core/layout/tabfrm.cxx | 32 +++++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
New commits:
commit 84203fab20b7eb98f0d3667e6626f5c2139e5a7f
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date: Mon Jul 9 15:43:44 2012 +0000
Resolves: #i120016# refine condition for allowing split of a table row
Found by: Yan Ji, Jian Hong Cheng
Patch by: Oliver-Rainer Wittmann
Review by: Jian Hong Cheng
(cherry picked from commit 472d5610c71b7a74e6d279d8f625cec8b41b8e81)
Conflicts:
sw/source/core/layout/tabfrm.cxx
Change-Id: I718a0c70c12ed34c4ca3a2826f388b17a84c63e7
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index dde5056..4c62cb9 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -1800,6 +1800,22 @@ SwFrm* sw_FormatNextCntntForKeep( SwTabFrm* pTabFrm )
return pNxt;
}
+namespace {
+ bool AreAllRowsKeepWithNext( const SwRowFrm* pFirstRowFrm )
+ {
+ bool bRet = pFirstRowFrm != 0 &&
+ pFirstRowFrm->ShouldRowKeepWithNext();
+
+ while ( bRet && pFirstRowFrm->GetNext() != 0 )
+ {
+ pFirstRowFrm = dynamic_cast<const SwRowFrm*>(pFirstRowFrm->GetNext());
+ bRet = pFirstRowFrm != 0 &&
+ pFirstRowFrm->ShouldRowKeepWithNext();
+ }
+
+ return bRet;
+ }
+}
void SwTabFrm::MakeAll()
{
if ( IsJoinLocked() || StackHack::IsLocked() || StackHack::Count() > 50 )
@@ -2334,9 +2350,15 @@ void SwTabFrm::MakeAll()
//
SwFrm* pIndPrev = GetIndPrev();
const SwRowFrm* pFirstNonHeadlineRow = GetFirstNonHeadlineRow();
+ // #i120016# if this row wants to keep, allow split in case that all rows want to keep with next,
+ // the table can not move forward as it is the first one and a split is in general allowed.
+ const bool bAllowSplitOfRow = ( bTableRowKeep &&
+ AreAllRowsKeepWithNext( pFirstNonHeadlineRow ) ) &&
+ !pIndPrev &&
+ !bDontSplit;
if ( pFirstNonHeadlineRow && nUnSplitted > 0 &&
- ( !bTableRowKeep || pFirstNonHeadlineRow->GetNext() || !pFirstNonHeadlineRow->ShouldRowKeepWithNext() ) &&
+ ( !bTableRowKeep || pFirstNonHeadlineRow->GetNext() || !pFirstNonHeadlineRow->ShouldRowKeepWithNext() || bAllowSplitOfRow ) &&
( !bDontSplit || !pIndPrev ) )
{
// #i29438#
@@ -2420,11 +2442,15 @@ void SwTabFrm::MakeAll()
// An existing follow flow line has to be removed.
//
if ( HasFollowFlowLine() )
+ {
RemoveFollowFlowLine();
+ }
- const bool bSplitError = !Split( nDeadLine, bTryToSplit, bTableRowKeep );
+ const bool bSplitError = !Split( nDeadLine, bTryToSplit, ( bTableRowKeep && !bAllowSplitOfRow ) );
if( !bTryToSplit && !bSplitError && nUnSplitted > 0 )
+ {
--nUnSplitted;
+ }
// #i29771# Two tries to split the table
// If an error occurred during splitting. We start a second
@@ -2454,7 +2480,7 @@ void SwTabFrm::MakeAll()
continue;
}
- bTryToSplit = !bSplitError;
+ bTryToSplit = !bSplitError;
//To avoid oscillations the Follow must become valid now
if ( GetFollow() )
More information about the Libreoffice-commits
mailing list