sw/source/uibase/app/docst.cxx | 5 +++ sw/source/uibase/wrtsh/wrtsh1.cxx | 56 +++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 27 deletions(-)
New commits: commit a3238a8e35c9c649069ef67ffa83e0d83f25936b Author: Jim Raykowski <rayk...@gmail.com> AuthorDate: Thu Oct 13 16:20:44 2022 -0800 Commit: Jim Raykowski <rayk...@gmail.com> CommitDate: Thu Oct 20 07:52:34 2022 +0200 tdf#151521 Fix para applied style sub-level remains visible ... when parent outline content is folded Commit 22757917067d7c4e475228cec2a0dd4d2f900e95, removed making all outline content temporarily visible during style application. But it is needed so that paragraph applied stye sub-levels do not remain visible when outline-folding is set to include sub-levels as outline content. This patch fixes the cause of the bug reported in tdf#151315. Change-Id: I4b8fd4bdd1ca08d65cf8fbb8c3f73ef7d00dcc2e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141357 Tested-by: Jenkins Reviewed-by: Jim Raykowski <rayk...@gmail.com> diff --git a/sw/source/uibase/app/docst.cxx b/sw/source/uibase/app/docst.cxx index 3581cac6d09b..baa2a4ca74ef 100644 --- a/sw/source/uibase/app/docst.cxx +++ b/sw/source/uibase/app/docst.cxx @@ -1157,6 +1157,11 @@ SfxStyleFamily SwDocShell::ApplyStyles(const OUString &rName, SfxStyleFamily nFa } case SfxStyleFamily::Para: { + // When outline-folding is enabled, MakeAllOutlineContentTemporarilyVisible makes + // application of a paragraph style that has an outline-level greater than the previous + // outline node become folded content of the previous outline node if the previous + // outline node's content is folded. + MakeAllOutlineContentTemporarilyVisible a(GetDoc()); // #i62675# // clear also list attributes at affected text nodes, if paragraph // style has the list style attribute set. diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index d9374e18a66b..8bbdb869e539 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -2491,30 +2491,6 @@ void SwWrtShell::InvalidateOutlineContentVisibility() void SwWrtShell::MakeAllFoldedOutlineContentVisible(bool bMakeVisible) { - // deselect any drawing or frame and leave editing mode - SdrView* pSdrView = GetDrawView(); - if (pSdrView && pSdrView->IsTextEdit() ) - { - bool bLockView = IsViewLocked(); - LockView(true); - EndTextEdit(); - LockView(bLockView); - } - - if (IsSelFrameMode() || IsObjSelected()) - { - UnSelectFrame(); - LeaveSelFrameMode(); - GetView().LeaveDrawCreate(); - EnterStdMode(); - DrawSelChanged(); - GetView().StopShellTimer(); - } - else - EnterStdMode(); - - SwOutlineNodes::size_type nPos = GetOutlinePos(); - if (bMakeVisible) { // make all content visible @@ -2548,17 +2524,43 @@ void SwWrtShell::MakeAllFoldedOutlineContentVisible(bool bMakeVisible) } else { + if (SdrView* pSdrView = GetDrawView(); pSdrView && pSdrView->IsTextEdit() ) + { + bool bLockView = IsViewLocked(); + LockView(true); + EndTextEdit(); + LockView(bLockView); + } + if (IsSelFrameMode() || IsObjSelected()) + { + UnSelectFrame(); + LeaveSelFrameMode(); + GetView().LeaveDrawCreate(); + EnterStdMode(); + } + + // Get current frame in which the cursor is positioned for use in placing the cursor. + const SwFrame* pCurrFrame = GetCurrFrame(false); + + SwOutlineNodes::size_type nPos = GetOutlinePos(); + StartAction(); InvalidateOutlineContentVisibility(); EndAction(); - // If needed, find visible outline node to place cursor. - if (nPos != SwOutlineNodes::npos && !IsOutlineContentVisible(nPos)) + // If needed, find visible outline node frame to place cursor. + if (!pCurrFrame || !pCurrFrame->isFrameAreaDefinitionValid() || pCurrFrame->IsInDtor() || + (nPos != SwOutlineNodes::npos && + !GetNodes().GetOutLineNds()[nPos]->GetTextNode()->getLayoutFrame(nullptr))) { - while (nPos != SwOutlineNodes::npos && !GetNodes().GetOutLineNds()[nPos]->GetTextNode()->getLayoutFrame(nullptr)) + while (nPos != SwOutlineNodes::npos && + !GetNodes().GetOutLineNds()[nPos]->GetTextNode()->getLayoutFrame(nullptr)) --nPos; if (nPos != SwOutlineNodes::npos) + { + EnterStdMode(); GotoOutline(nPos); + } } } GetView().GetDocShell()->Broadcast(SfxHint(SfxHintId::DocChanged));