summaryrefslogtreecommitdiff
path: root/sw/source/core/doc/docdesc.cxx
diff options
context:
space:
mode:
authorDaniel Arato (NISZ) <arato.daniel@nisz.hu>2021-01-26 13:11:42 +0100
committerLászló Németh <nemeth@numbertext.org>2021-03-02 11:10:29 +0100
commitf5dc6b11d2218d94c9effe7a1ab418d0133da5e3 (patch)
treee2060ae00cd846278e49b554f502d59274a498dc /sw/source/core/doc/docdesc.cxx
parent3fe274dcfeca17ee7713b306fcd36183f6cf4689 (diff)
tdf#140117 sw UI: keep headers/footers when inactive
Custom left page and first headers (and footers) used to disappear forever if hidden temporarily by checking the "Same content on left and right pages" or "Same content on first page" options, respectively. This commit stashes the endangered headers (footers) in SwPageDesc and restores them on demand. Change-Id: I1f6b605e2bd19af18726de1b825721487d29b4eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110398 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'sw/source/core/doc/docdesc.cxx')
-rw-r--r--sw/source/core/doc/docdesc.cxx70
1 files changed, 56 insertions, 14 deletions
diff --git a/sw/source/core/doc/docdesc.cxx b/sw/source/core/doc/docdesc.cxx
index bd5308e27790..87a99ff13f84 100644
--- a/sw/source/core/doc/docdesc.cxx
+++ b/sw/source/core/doc/docdesc.cxx
@@ -433,38 +433,80 @@ void SwDoc::ChgPageDesc( size_t i, const SwPageDesc &rChged )
bool bHeaderFooterChanged = false;
// Synch header.
- const SwFormatHeader &rHead = rChged.GetMaster().GetHeader();
+ const SwFormatHeader& rMasterHead = rChged.GetMaster().GetHeader();
+ const SwFormatHeader& rLeftHead = rChged.GetLeft().GetHeader();
+ const SwFormatHeader& rFirstMasterHead = rChged.GetFirstMaster().GetHeader();
+ const SwFormatHeader& rFirstLeftHead = rChged.GetFirstLeft().GetHeader();
if (undoGuard.UndoWasEnabled())
{
// #i46909# no undo if header or footer changed
// Did something change in the nodes?
- const SwFormatHeader &rOldHead = rDesc.GetMaster().GetHeader();
+ const SwFormatHeader &rOldMasterHead = rDesc.GetMaster().GetHeader();
bHeaderFooterChanged |=
- ( rHead.IsActive() != rOldHead.IsActive() ||
+ ( rMasterHead.IsActive() != rOldMasterHead.IsActive() ||
rChged.IsHeaderShared() != rDesc.IsHeaderShared() ||
rChged.IsFirstShared() != rDesc.IsFirstShared() );
}
- rDesc.GetMaster().SetFormatAttr( rHead );
- CopyMasterHeader(rChged, rHead, rDesc, true, false); // Copy left header
- CopyMasterHeader(rChged, rHead, rDesc, false, true); // Copy first master
- CopyMasterHeader(rChged, rHead, rDesc, true, true); // Copy first left
+ rDesc.GetMaster().SetFormatAttr( rMasterHead );
+ const bool bRestoreStashedLeftHead = rDesc.IsHeaderShared() && !rChged.IsHeaderShared();
+ const bool bRestoreStashedFirstMasterHead = rDesc.IsFirstShared() && !rChged.IsFirstShared();
+ const bool bRestoreStashedFirstLeftHead = (rDesc.IsHeaderShared() && !rChged.IsHeaderShared()) || (rDesc.IsFirstShared() && !rChged.IsFirstShared());
+ const SwFrameFormat* pStashedLeftFormat = bRestoreStashedLeftHead ? rChged.GetStashedFrameFormat(true, true, false) : nullptr;
+ const SwFrameFormat* pStashedFirstMasterFormat = bRestoreStashedFirstMasterHead ? rChged.GetStashedFrameFormat(true, false, true) : nullptr;
+ const SwFrameFormat* pStashedFirstLeftFormat = bRestoreStashedFirstLeftHead ? rChged.GetStashedFrameFormat(true, true, true) : nullptr;
+ CopyMasterHeader(rChged, pStashedLeftFormat ? pStashedLeftFormat->GetHeader() : rMasterHead, rDesc, true, false); // Copy left header
+ CopyMasterHeader(rChged, pStashedFirstMasterFormat ? pStashedFirstMasterFormat->GetHeader() : rMasterHead, rDesc, false, true); // Copy first master
+ CopyMasterHeader(rChged, pStashedFirstLeftFormat ? pStashedFirstLeftFormat->GetHeader() : rMasterHead, rDesc, true, true); // Copy first left
+
+ // Stash header formats as needed.
+ const bool bStashLeftHead = !rDesc.IsHeaderShared() && rChged.IsHeaderShared();
+ const bool bStashFirstMasterHead = !rDesc.IsFirstShared() && rChged.IsFirstShared();
+ const bool bStashFirstLeftHead = (!rDesc.IsHeaderShared() && rChged.IsHeaderShared()) || (!rDesc.IsFirstShared() && rChged.IsFirstShared());
+ if (rLeftHead.GetRegisteredIn() && bStashLeftHead)
+ rDesc.StashFrameFormat(rChged.GetLeft(), true, true, false);
+ if (rFirstMasterHead.GetRegisteredIn() && bStashFirstMasterHead)
+ rDesc.StashFrameFormat(rChged.GetFirstMaster(), true, false, true);
+ if (rFirstLeftHead.GetRegisteredIn() && bStashFirstLeftHead)
+ rDesc.StashFrameFormat(rChged.GetFirstLeft(), true, true, true);
+
rDesc.ChgHeaderShare( rChged.IsHeaderShared() );
// Synch Footer.
- const SwFormatFooter &rFoot = rChged.GetMaster().GetFooter();
+ const SwFormatFooter& rMasterFoot = rChged.GetMaster().GetFooter();
+ const SwFormatFooter& rLeftFoot = rChged.GetLeft().GetFooter();
+ const SwFormatFooter& rFirstMasterFoot = rChged.GetFirstMaster().GetFooter();
+ const SwFormatFooter& rFirstLeftFoot = rChged.GetFirstLeft().GetFooter();
if (undoGuard.UndoWasEnabled())
{
// #i46909# no undo if header or footer changed
// Did something change in the Nodes?
- const SwFormatFooter &rOldFoot = rDesc.GetMaster().GetFooter();
+ const SwFormatFooter &rOldMasterFoot = rDesc.GetMaster().GetFooter();
bHeaderFooterChanged |=
- ( rFoot.IsActive() != rOldFoot.IsActive() ||
+ ( rMasterFoot.IsActive() != rOldMasterFoot.IsActive() ||
rChged.IsFooterShared() != rDesc.IsFooterShared() );
}
- rDesc.GetMaster().SetFormatAttr( rFoot );
- CopyMasterFooter(rChged, rFoot, rDesc, true, false); // Copy left footer
- CopyMasterFooter(rChged, rFoot, rDesc, false, true); // Copy first master
- CopyMasterFooter(rChged, rFoot, rDesc, true, true); // Copy first left
+ rDesc.GetMaster().SetFormatAttr( rMasterFoot );
+ const bool bRestoreStashedLeftFoot = rDesc.IsFooterShared() && !rChged.IsFooterShared();
+ const bool bRestoreStashedFirstMasterFoot = rDesc.IsFirstShared() && !rChged.IsFirstShared();
+ const bool bRestoreStashedFirstLeftFoot = (rDesc.IsFooterShared() && !rChged.IsFooterShared()) || (rDesc.IsFirstShared() && !rChged.IsFirstShared());
+ const SwFrameFormat* pStashedLeftFoot = bRestoreStashedLeftFoot ? rChged.GetStashedFrameFormat(false, true, false) : nullptr;
+ const SwFrameFormat* pStashedFirstMasterFoot = bRestoreStashedFirstMasterFoot ? rChged.GetStashedFrameFormat(false, false, true) : nullptr;
+ const SwFrameFormat* pStashedFirstLeftFoot = bRestoreStashedFirstLeftFoot ? rChged.GetStashedFrameFormat(false, true, true) : nullptr;
+ CopyMasterFooter(rChged, pStashedLeftFoot ? pStashedLeftFoot->GetFooter() : rMasterFoot, rDesc, true, false); // Copy left footer
+ CopyMasterFooter(rChged, pStashedFirstMasterFoot ? pStashedFirstMasterFoot->GetFooter() : rMasterFoot, rDesc, false, true); // Copy first master
+ CopyMasterFooter(rChged, pStashedFirstLeftFoot ? pStashedFirstLeftFoot->GetFooter() : rMasterFoot, rDesc, true, true); // Copy first left
+
+ // Stash footer formats as needed.
+ const bool bStashLeftFoot = !rDesc.IsFooterShared() && rChged.IsFooterShared();
+ const bool bStashFirstMasterFoot = !rDesc.IsFirstShared() && rChged.IsFirstShared();
+ const bool bStashFirstLeftFoot = (!rDesc.IsFooterShared() && rChged.IsFooterShared()) || (!rDesc.IsFirstShared() && rChged.IsFirstShared());
+ if (rLeftFoot.GetRegisteredIn() && bStashLeftFoot)
+ rDesc.StashFrameFormat(rChged.GetLeft(), false, true, false);
+ if (rFirstMasterFoot.GetRegisteredIn() && bStashFirstMasterFoot)
+ rDesc.StashFrameFormat(rChged.GetFirstMaster(), false, false, true);
+ if (rFirstLeftFoot.GetRegisteredIn() && bStashFirstLeftFoot)
+ rDesc.StashFrameFormat(rChged.GetFirstLeft(), false, true, true);
+
rDesc.ChgFooterShare( rChged.IsFooterShared() );
// there is just one first shared flag for both header and footer?
rDesc.ChgFirstShare( rChged.IsFirstShared() );