diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index bee65c26..4c004e00 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -881,7 +881,7 @@ std::vector Storage::getActiveTokenIdsForId(Id tokenId, Id* declarationId) c std::vector Storage::getNodeIdsForLocationIds(const std::vector& locationIds) const { - std::vector nodeIds; + std::set nodeIds; for (Id locationId : locationIds) { @@ -890,15 +890,15 @@ std::vector Storage::getNodeIdsForLocationIds(const std::vector& locatio StorageEdge edge = m_sqliteStorage.getEdgeById(elementId); if (edge.id != 0) // here we test if location is an edge. { - nodeIds.push_back(edge.targetNodeId); + nodeIds.insert(edge.targetNodeId); } else { - nodeIds.push_back(elementId); + nodeIds.insert(elementId); } } - return nodeIds; + return utility::toVector(nodeIds); } std::vector Storage::getTokenIdsForMatches(const std::vector& matches) const diff --git a/src/lib/utility/utility.h b/src/lib/utility/utility.h index f63128b4..e4758fc5 100644 --- a/src/lib/utility/utility.h +++ b/src/lib/utility/utility.h @@ -33,6 +33,9 @@ namespace utility template std::vector toVector(const std::deque& d); + template + std::vector toVector(const std::set& d); + template std::vector toStrings(const std::vector& d); @@ -81,6 +84,14 @@ std::vector utility::toVector(const std::deque& d) return v; } +template +std::vector utility::toVector(const std::set& d) +{ + std::vector v; + v.insert(v.begin(), d.begin(), d.end()); + return v; +} + template std::vector utility::toStrings(const std::vector& d) { diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index 6e62c898..3ed2cd90 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -419,7 +419,6 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) if (Qt::KeyboardModifier::ControlModifier && QApplication::keyboardModifiers()) { - // std::pair lineColumn = toLineColumn(this->cursorForPosition(event->pos()).position()); m_eventPosition = event->pos(); setIDECursorPosition(); } @@ -429,7 +428,7 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) std::vector annotations = getAnnotationsForPosition(cursor.position()); std::vector locationIds; - std::vector tokenIds; + std::set tokenIds; bool allActive = true; for (const Annotation* annotation : annotations) @@ -445,7 +444,7 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) } if (annotation->tokenId > 0) { - tokenIds.push_back(annotation->tokenId); + tokenIds.insert(annotation->tokenId); } } @@ -458,9 +457,9 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) { MessageActivateTokenLocations(locationIds).dispatch(); } - else if (tokenIds.size()) + else if (tokenIds.size()) // fallback for links in project description { - MessageActivateTokenIds(tokenIds).dispatch(); + MessageActivateTokenIds(utility::toVector(tokenIds)).dispatch(); } } } @@ -878,4 +877,4 @@ void QtCodeArea::createActions() m_setIDECursorPositionAction->setStatusTip(tr("Set the IDE Cursor to this code position")); m_setIDECursorPositionAction->setToolTip(tr("Set the IDE Cursor to this code position")); connect(m_setIDECursorPositionAction, SIGNAL(triggered()), this, SLOT(setIDECursorPosition())); -} \ No newline at end of file +}