diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-08-20 11:50:34 +0200 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2013-08-20 12:16:57 +0000 |
commit | f7433971d901f8f66538ef8df3e7729b0047ca2c (patch) | |
tree | 903bca8b9807bb35ae1cdf41a89bf3c4ad92810d | |
parent | a0342b16c6a837f8fcecd3c7983df119e459b67f (diff) |
fdo#66145: fix copying of header/footer when un-sharing
SwDoc::CopyMasterHeader/Footer(): this could result in sharing the
first-page header/footer with the left-page (!) when un-sharing
via the dialog; the reason is that what actually happens here is that
the left-page header/footer was never changed but the master one
was copied in SwDocStyleSheet::SetItemSet(), so it sort of worked
by accident before the first-page header/footer was added...
Change-Id: Ia24df6ad59cda484559f2ca48ecaa7563878120b
(cherry picked from commit e1a9a348a519a69f898c9c1e6d87a5837b8267f9)
Reviewed-on: https://gerrit.libreoffice.org/5536
Reviewed-by: Petr Mladek <pmladek@suse.cz>
Tested-by: Petr Mladek <pmladek@suse.cz>
-rw-r--r-- | sw/source/core/doc/docdesc.cxx | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sw/source/core/doc/docdesc.cxx b/sw/source/core/doc/docdesc.cxx index 1852b4c16fd4..6c31cbf1a509 100644 --- a/sw/source/core/doc/docdesc.cxx +++ b/sw/source/core/doc/docdesc.cxx @@ -197,7 +197,11 @@ void SwDoc::CopyMasterHeader(const SwPageDesc &rChged, const SwFmtHeader &rHead, const SwFrmFmt& rChgedFrmFmt = (bLeft ? rChged.GetLeft() : rChged.GetFirst()); rDescFrmFmt.SetFmtAttr( rChgedFrmFmt.GetHeader() ); } - else if( (*aRCnt.GetCntntIdx()) == (*aCnt.GetCntntIdx()) ) + else if ((*aRCnt.GetCntntIdx() == *aCnt.GetCntntIdx()) || + // The CntntIdx is _always_ different when called from + // SwDocStyleSheet::SetItemSet, because it deep-copies the + // PageDesc. So check if it was previously shared. + ((bLeft) ? pDesc->IsHeaderShared() : pDesc->IsFirstShared())) { SwFrmFmt *pFmt = new SwFrmFmt( GetAttrPool(), (bLeft ? "Left header" : "First header"), GetDfltFrmFmt() ); @@ -252,7 +256,11 @@ void SwDoc::CopyMasterFooter(const SwPageDesc &rChged, const SwFmtFooter &rFoot, const SwFrmFmt& rChgedFrmFmt = (bLeft ? rChged.GetLeft() : rChged.GetFirst()); rDescFrmFmt.SetFmtAttr( rChgedFrmFmt.GetFooter() ); } - else if( (*aRCnt.GetCntntIdx()) == (*aLCnt.GetCntntIdx()) ) + else if ((*aRCnt.GetCntntIdx() == *aLCnt.GetCntntIdx()) || + // The CntntIdx is _always_ different when called from + // SwDocStyleSheet::SetItemSet, because it deep-copies the + // PageDesc. So check if it was previously shared. + ((bLeft) ? pDesc->IsHeaderShared() : pDesc->IsFirstShared())) { SwFrmFmt *pFmt = new SwFrmFmt( GetAttrPool(), (bLeft ? "Left footer" : "First footer"), GetDfltFrmFmt() ); @@ -362,6 +370,8 @@ void SwDoc::ChgPageDesc( sal_uInt16 i, const SwPageDesc &rChged ) CopyMasterFooter(rChged, rFoot, pDesc, true); // Copy left footer CopyMasterFooter(rChged, rFoot, pDesc, false); // Copy first footer pDesc->ChgFooterShare( rChged.IsFooterShared() ); + // there is just one first shared flag for both header and footer? + pDesc->ChgFirstShare( rChged.IsFirstShared() ); if ( pDesc->GetName() != rChged.GetName() ) pDesc->SetName( rChged.GetName() ); |