summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-07-09 13:12:10 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-07-09 14:49:37 +0200
commitd1aaa23c53e705de8256206e5833c6629ce92108 (patch)
tree014b9a731cae1aa9ee544f926ff562f45f875286
parent4c912d3d8bd1ae01131e90fb4a2d8371a53ee888 (diff)
sw layout: fix first page header/footer insertion
Change-Id: I1d0051d0b9db486326f1ac7908d29af63f1f1726
-rw-r--r--sw/source/core/layout/flowfrm.cxx6
-rw-r--r--sw/source/core/layout/pagechg.cxx17
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 );