sw/source/core/crsr/bookmrk.cxx | 3 +-- sw/source/uibase/shells/textsh1.cxx | 12 +++--------- sw/source/uibase/uiview/viewmdi.cxx | 19 ++++++++++--------- 3 files changed, 14 insertions(+), 20 deletions(-)
New commits: commit 0663d86a84199d1f5f303cf300cd64403302dbe5 Author: Jim Raykowski <rayk...@gmail..com> AuthorDate: Sun Jan 5 23:01:08 2020 -0900 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Fri Jan 10 09:45:53 2020 +0100 tdf#88713 Fix navigating navigator reminders Change-Id: I65be92eda086af2f98da723828ff965047e87227 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86256 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index e5c879b7518c..d6524a5f0072 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -336,9 +336,8 @@ namespace sw { namespace mark } } - // TODO: everything else uses MarkBase::GenerateNewName ? NavigatorReminder::NavigatorReminder(const SwPaM& rPaM) - : MarkBase(rPaM, "__NavigatorReminder__") + : MarkBase(rPaM, MarkBase::GenerateNewName("__NavigatorReminder__")) { } UnoMark::UnoMark(const SwPaM& aPaM) diff --git a/sw/source/uibase/shells/textsh1.cxx b/sw/source/uibase/shells/textsh1.cxx index 2b063cee3caa..08097faf0205 100644 --- a/sw/source/uibase/shells/textsh1.cxx +++ b/sw/source/uibase/shells/textsh1.cxx @@ -686,8 +686,6 @@ void SwTextShell::Execute(SfxRequest &rReq) } case FN_SET_REMINDER: { - static sal_uInt16 m_nAutoMarkIdx = 0; - // collect and sort navigator reminder names IDocumentMarkAccess* const pMarkAccess = rWrtSh.getIDocumentMarkAccess(); std::vector< OUString > vNavMarkNames; @@ -700,17 +698,13 @@ void SwTextShell::Execute(SfxRequest &rReq) } std::sort(vNavMarkNames.begin(), vNavMarkNames.end()); - // we are maxed out and delete one - // nAutoMarkIdx rotates through the available MarkNames + // we are maxed out so delete the first one // this assumes that IDocumentMarkAccess generates Names in ascending order if(vNavMarkNames.size() == MAX_MARKS) - pMarkAccess->deleteMark(pMarkAccess->findMark(vNavMarkNames[m_nAutoMarkIdx])); + pMarkAccess->deleteMark(pMarkAccess->findMark(vNavMarkNames[0])); rWrtSh.SetBookmark(vcl::KeyCode(), OUString(), IDocumentMarkAccess::MarkType::NAVIGATOR_REMINDER); - SwView::SetActMark( m_nAutoMarkIdx ); - - if(++m_nAutoMarkIdx == MAX_MARKS) - m_nAutoMarkIdx = 0; + SwView::SetActMark(vNavMarkNames.size() < MAX_MARKS ? vNavMarkNames.size() : MAX_MARKS-1); break; } diff --git a/sw/source/uibase/uiview/viewmdi.cxx b/sw/source/uibase/uiview/viewmdi.cxx index 4fd706e84667..1b660148326d 100644 --- a/sw/source/uibase/uiview/viewmdi.cxx +++ b/sw/source/uibase/uiview/viewmdi.cxx @@ -469,26 +469,27 @@ IMPL_LINK( SwView, MoveNavigationHdl, void*, p, void ) rSh.MoveCursor(); rSh.EnterStdMode(); - // collect navigator reminders + // collect and sort navigator reminder names IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess(); - std::vector< const ::sw::mark::IMark* > vNavMarks; - for( IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getAllMarksBegin(); + std::vector< OUString > vNavMarkNames; + for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getAllMarksBegin(); ppMark != pMarkAccess->getAllMarksEnd(); ++ppMark) { if( IDocumentMarkAccess::GetType(**ppMark) == IDocumentMarkAccess::MarkType::NAVIGATOR_REMINDER ) - vNavMarks.push_back(*ppMark); + vNavMarkNames.push_back((*ppMark)->GetName()); } + std::sort(vNavMarkNames.begin(), vNavMarkNames.end()); // move - if(!vNavMarks.empty()) + if(!vNavMarkNames.empty()) { SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty ); if(bNext) { m_nActMark++; - if (m_nActMark >= MAX_MARKS || m_nActMark >= static_cast<sal_Int32>(vNavMarks.size())) + if (m_nActMark >= MAX_MARKS || m_nActMark >= static_cast<sal_Int32>(vNavMarkNames.size())) { m_nActMark = 0; SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::EndWrapped ); @@ -497,13 +498,13 @@ IMPL_LINK( SwView, MoveNavigationHdl, void*, p, void ) else { m_nActMark--; - if (m_nActMark < 0 || m_nActMark >= static_cast<sal_Int32>(vNavMarks.size())) + if (m_nActMark < 0 || m_nActMark >= static_cast<sal_Int32>(vNavMarkNames.size())) { - m_nActMark = vNavMarks.size()-1; + m_nActMark = vNavMarkNames.size()-1; SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::StartWrapped ); } } - rSh.GotoMark(vNavMarks[m_nActMark]); + rSh.GotoMark(vNavMarkNames[m_nActMark]); } else SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits