[Libreoffice-commits] core.git: Branch 'libreoffice-4-0' - sw/source

Michael Stahl mstahl at redhat.com
Tue Aug 20 05:17:20 PDT 2013


 sw/source/core/doc/docdesc.cxx |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

New commits:
commit f7433971d901f8f66538ef8df3e7729b0047ca2c
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Aug 20 11:50:34 2013 +0200

    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 at suse.cz>
    Tested-by: Petr Mladek <pmladek at suse.cz>

diff --git a/sw/source/core/doc/docdesc.cxx b/sw/source/core/doc/docdesc.cxx
index 1852b4c..6c31cbf 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() );


More information about the Libreoffice-commits mailing list