sw/source/core/crsr/crstrvl.cxx   |    4 ++++
 sw/source/uibase/uiview/view2.cxx |   25 -------------------------
 2 files changed, 4 insertions(+), 25 deletions(-)

New commits:
commit 644aacd1e4b419f2f85b6c2e18026ca04206b378
Author: Michael Stahl <mst...@redhat.com>
Date:   Wed Apr 5 16:54:57 2017 +0200

    rhbz#1438179 sw: fix toolbar "Next Track Change" / "Previous..."
    
    There's some confusing workarounds in SwView::Execute() that aren't
    needed if the SwCursorShell just calls NormalizePam() so it always
    makes progress.
    
    Change-Id: I3b014079b19925041234fcd858526148890f560c
    (cherry picked from commit 25eb0899227830cca7f28006376962d84f8e9c7a)
    Reviewed-on: https://gerrit.libreoffice.org/36166
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>

diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index 6099b32aec51..c024e0eb7d69 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -1982,6 +1982,8 @@ const SwRangeRedline* SwCursorShell::SelNextRedline()
         SwCallLink aLk( *this ); // watch Cursor-Moves
         SwCursorSaveState aSaveState( *m_pCurrentCursor );
 
+        // ensure point is at the end so alternating SelNext/SelPrev works
+        NormalizePam(false);
         pFnd = GetDoc()->getIDocumentRedlineAccess().SelNextRedline( 
*m_pCurrentCursor );
         if( pFnd && !m_pCurrentCursor->IsInProtectTable() && 
!m_pCurrentCursor->IsSelOvr() )
             UpdateCursor( 
SwCursorShell::SCROLLWIN|SwCursorShell::CHKRANGE|SwCursorShell::READONLY);
@@ -2000,6 +2002,8 @@ const SwRangeRedline* SwCursorShell::SelPrevRedline()
         SwCallLink aLk( *this ); // watch Cursor-Moves
         SwCursorSaveState aSaveState( *m_pCurrentCursor );
 
+        // ensure point is at the start so alternating SelNext/SelPrev works
+        NormalizePam(true);
         pFnd = GetDoc()->getIDocumentRedlineAccess().SelPrevRedline( 
*m_pCurrentCursor );
         if( pFnd && !m_pCurrentCursor->IsInProtectTable() && 
!m_pCurrentCursor->IsSelOvr() )
             UpdateCursor( 
SwCursorShell::SCROLLWIN|SwCursorShell::CHKRANGE|SwCursorShell::READONLY);
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index 8865d294597a..7b639f6628d8 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -714,7 +714,6 @@ void SwView::Execute(SfxRequest &rReq)
             if (pArgs && pArgs->GetItemState(nSlot, false, &pItem) == 
SfxItemState::SET)
                 nRedline = static_cast<const 
SfxUInt16Item*>(pItem)->GetValue();
 
-            const SwRangeRedline *pCurrent = m_pWrtShell->GetCurrRedline();
             SwDoc* pDoc = m_pWrtShell->GetDoc();
             const SwRedlineTable& rTable = 
pDoc->getIDocumentRedlineAccess().GetRedlineTable();
             const SwRangeRedline *pNext = nullptr;
@@ -723,15 +722,6 @@ void SwView::Execute(SfxRequest &rReq)
             else
                 pNext = m_pWrtShell->SelNextRedline();
 
-            // FN_REDLINE_PREV_CHANGE leaves the selection point at the start 
of the redline.
-            // In such cases, SelNextRedline (which starts searching from the 
selection point)
-            // immediately finds the current redline and advances the 
selection point to its end.
-
-            // This behavior means that PREV_CHANGE followed by NEXT_CHANGE 
would not change
-            // the current redline, so we detect it and select the next 
redline again.
-            if (pCurrent && pCurrent == pNext && nRedline == USHRT_MAX)
-                pNext = m_pWrtShell->SelNextRedline();
-
             if (pNext)
                 m_pWrtShell->SetInSelect();
         }
@@ -739,24 +729,9 @@ void SwView::Execute(SfxRequest &rReq)
 
         case FN_REDLINE_PREV_CHANGE:
         {
-            const SwPaM *pCursor = m_pWrtShell->GetCursor();
-            const SwPosition initialCursorStart = *pCursor->Start();
             const SwRangeRedline *pPrev = m_pWrtShell->SelPrevRedline();
 
             if (pPrev)
-            {
-                // FN_REDLINE_NEXT_CHANGE leaves the selection point at the 
end of the redline.
-                // In such cases, SelPrevRedline (which starts searching from 
the selection point)
-                // immediately finds the current redline and advances the 
selection point to its
-                // start.
-
-                // This behavior means that NEXT_CHANGE followed by 
PREV_CHANGE would not change
-                // the current redline, so we detect it and move to the 
previous redline again.
-                if (initialCursorStart == *pPrev->Start())
-                    pPrev = m_pWrtShell->SelPrevRedline();
-            }
-
-            if (pPrev)
                 m_pWrtShell->SetInSelect();
         }
         break;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to