tdf#154701 Fix move paragraph not working properly with outline folding

Change-Id: Ibb4706fae198fada0f143b1b25149fcbcc5c41d1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157899
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx
index 9dc476fb..912283d 100644
--- a/sw/source/uibase/wrtsh/wrtsh1.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh1.cxx
@@ -2334,7 +2334,7 @@ bool SwWrtShell::IsOutlineContentVisible(const size_t nPos)

    // no layout frame means outline folding is set to include sub levels and the outline node has
    // a parent outline node with outline content visible attribute false (folded outline content)
    if (!pOutlineNode->GetTextNode()->getLayoutFrame(nullptr))
    if (!pOutlineNode->GetTextNode()->getLayoutFrame(GetLayout()))
        return false;

    // try the next node to determine if this outline node has visible content
@@ -2357,7 +2357,7 @@ bool SwWrtShell::IsOutlineContentVisible(const size_t nPos)
            return GetAttrOutlineContentVisible(nPos);

        if (aIdx.GetNode().IsTextNode())
            return aIdx.GetNode().GetTextNode()->getLayoutFrame(nullptr);
            return aIdx.GetNode().GetTextNode()->getLayoutFrame(GetLayout());
        if (aIdx.GetNode().IsTableNode())
        {
            SwTable& rTable = aIdx.GetNode().GetTableNode()->GetTable();
@@ -2592,43 +2592,24 @@ 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();
        }
        AssureStdMode();

        // Get current frame in which the cursor is positioned for use in placing the cursor.
        const SwFrame* pCurrFrame = GetCurrFrame(false);

        // Get the outline position of the cursor so the cursor can be place at a visible outline
        // node if it is not visible after InvalidateOutlineContentVisiblity below.
        SwOutlineNodes::size_type nPos = GetOutlinePos();

        StartAction();
        InvalidateOutlineContentVisibility();
        EndAction();

        // 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)))
        // If needed, find a visible outline node to place the cursor.
        if (nPos != SwOutlineNodes::npos && !IsOutlineContentVisible(nPos))
        {
            while (nPos != SwOutlineNodes::npos &&
                   !GetNodes().GetOutLineNds()[nPos]->GetTextNode()->getLayoutFrame(nullptr))
                   !GetNodes().GetOutLineNds()[nPos]->GetTextNode()->getLayoutFrame(GetLayout()))
                --nPos;
            if (nPos != SwOutlineNodes::npos)
            {
                EnterStdMode();
                GotoOutline(nPos);
            }
        }
    }
    GetView().GetDocShell()->Broadcast(SfxHint(SfxHintId::DocChanged));