diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-07-09 13:12:10 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-07-09 14:49:37 +0200 |
commit | d1aaa23c53e705de8256206e5833c6629ce92108 (patch) | |
tree | 014b9a731cae1aa9ee544f926ff562f45f875286 | |
parent | 4c912d3d8bd1ae01131e90fb4a2d8371a53ee888 (diff) |
sw layout: fix first page header/footer insertion
Change-Id: I1d0051d0b9db486326f1ac7908d29af63f1f1726
-rw-r--r-- | sw/source/core/layout/flowfrm.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/layout/pagechg.cxx | 17 |
2 files changed, 19 insertions, 4 deletions
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx index 51fa1bea2f9f..7ca710788cc5 100644 --- a/sw/source/core/layout/flowfrm.cxx +++ b/sw/source/core/layout/flowfrm.cxx @@ -924,6 +924,10 @@ sal_Bool SwFrm::WrongPageDesc( SwPageFrm* pNew ) : pNew->OnRightPage(); if ( !pDesc ) pDesc = pNew->FindPageDesc(); + + SwPageFrm* pPrevFrm = dynamic_cast<SwPageFrm*>(pNew->GetPrev()); + bool bFirst = pPrevFrm && pPrevFrm->GetPageDesc() != pDesc && !pDesc->IsFirstShared(); + const SwFlowFrm *pNewFlow = pNew->FindFirstBodyCntnt(); // Did we find ourselves? if( pNewFlow == pFlow ) @@ -934,7 +938,7 @@ sal_Bool SwFrm::WrongPageDesc( SwPageFrm* pNew ) ? pNewFlow->GetFrm()->GetAttrSet()->GetPageDesc().GetPageDesc():0; return ( pNew->GetPageDesc() != pDesc || // own desc ? - pNew->GetFmt() != (bOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt()) || + pNew->GetFmt() != (bFirst ? pDesc->GetFirstFmt() : (bOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt())) || ( pNewDesc && pNewDesc == pDesc ) ); } diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index 9a42d00fb490..7eaa58c879a7 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -1105,8 +1105,13 @@ void SwFrm::CheckPageDescs( SwPageFrm *pStart, sal_Bool bNotifyFields ) sal_Bool bCheckEmpty = pPage->IsEmptyPage(); sal_Bool bActOdd = pPage->OnRightPage(); sal_Bool bOdd = pPage->WannaRightPage(); - SwFrmFmt *pFmtWish = bOdd ? pDesc->GetRightFmt() - : pDesc->GetLeftFmt(); + SwPageFrm* pPrevFrm = dynamic_cast<SwPageFrm*>(pPage->GetPrev()); + bool bFirst = pPrevFrm && pPrevFrm->GetPageDesc() != pPage->GetPageDesc() && !pDesc->IsFirstShared(); + SwFrmFmt *pFmtWish = 0; + if (bFirst) + pFmtWish = pDesc->GetFirstFmt(); + else + pFmtWish = bOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt(); if ( bActOdd != bOdd || pDesc != pPage->GetPageDesc() || //falscher Desc @@ -1315,6 +1320,9 @@ SwPageFrm *SwFrm::InsertPage( SwPageFrm *pPrevPage, sal_Bool bFtn ) OSL_ENSURE( pDesc, "Missing PageDesc" ); if( !(bWishedOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt()) ) bWishedOdd = !bWishedOdd; + bool bWishedFirst = pDesc != pPrevPage->GetPageDesc(); + if (bWishedFirst && !pDesc->GetFirstFmt()) + bWishedFirst = false; SwDoc *pDoc = pPrevPage->GetFmt()->GetDoc(); SwFrmFmt *pFmt; @@ -1342,7 +1350,10 @@ SwPageFrm *SwFrm::InsertPage( SwPageFrm *pPrevPage, sal_Bool bFtn ) else bCheckPages = sal_True; } - pFmt = bWishedOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt(); + if (bWishedFirst && !pDesc->IsFirstShared()) + pFmt = pDesc->GetFirstFmt(); + else + pFmt = bWishedOdd ? pDesc->GetRightFmt() : pDesc->GetLeftFmt(); OSL_ENSURE( pFmt, "Descriptor without format." ); SwPageFrm *pPage = new SwPageFrm( pFmt, pRoot, pDesc ); pPage->Paste( pRoot, pSibling ); |