summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2017-04-05 16:54:57 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-04-10 16:22:14 +0200
commit644aacd1e4b419f2f85b6c2e18026ca04206b378 (patch)
treeb42a1f53a62d9cdfa9636d7264d8f9d2228278a2
parent2e716c24a628b2da2de365eb338ccc5b72960f9e (diff)
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 <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--sw/source/core/crsr/crstrvl.cxx4
-rw-r--r--sw/source/uibase/uiview/view2.cxx25
2 files changed, 4 insertions, 25 deletions
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;