[core] Fix remove passed points

Signed-off-by: gekeleda <git@davidgekeler.eu>
This commit is contained in:
gekeleda
2025-08-24 14:48:19 +02:00
parent 4d6cecd9ba
commit 265e94edc3
2 changed files with 5 additions and 2 deletions

View File

@@ -296,6 +296,7 @@ void BookmarkManager::DeleteUserMark(kml::MarkId markId)
CHECK_THREAD_CHECKER(m_threadChecker, ()); CHECK_THREAD_CHECKER(m_threadChecker, ());
ASSERT(!IsBookmark(markId), ()); ASSERT(!IsBookmark(markId), ());
auto it = m_userMarks.find(markId); auto it = m_userMarks.find(markId);
ASSERT(it != m_userMarks.end(), ());
auto const groupId = it->second->GetGroupId(); auto const groupId = it->second->GetGroupId();
GetGroup(groupId)->DetachUserMark(markId); GetGroup(groupId)->DetachUserMark(markId);
m_changesTracker.OnDeleteMark(markId); m_changesTracker.OnDeleteMark(markId);

View File

@@ -349,9 +349,11 @@ void RoutePointsLayout::SetFollowingMode(bool enabled)
void RoutePointsLayout::RemovePassedPoints() void RoutePointsLayout::RemovePassedPoints()
{ {
for (auto markId : m_manager.GetUserMarkIds(UserMark::Type::ROUTING)) { // Prevent recalculation of markIds at every iteration, since we are removing elements
auto markIds = m_manager.GetUserMarkIds(UserMark::Type::ROUTING);
for (auto markId : markIds) {
auto * mark = m_editSession.GetMarkForEdit<RouteMarkPoint>(markId); auto * mark = m_editSession.GetMarkForEdit<RouteMarkPoint>(markId);
if (mark->IsPassed()) if (mark && mark->IsPassed() && mark->GetRoutePointType() == RouteMarkType::Intermediate)
m_editSession.DeleteUserMark(mark->GetId()); m_editSession.DeleteUserMark(mark->GetId());
} }
} }