diff --git a/src/lib/component/controller/ErrorController.cpp b/src/lib/component/controller/ErrorController.cpp index 1e46b4f4..eb640ecf 100644 --- a/src/lib/component/controller/ErrorController.cpp +++ b/src/lib/component/controller/ErrorController.cpp @@ -33,10 +33,7 @@ void ErrorController::handleMessage(MessageShowErrors* message) { if (message->errorId) { - if (message->isReplayed()) - { - getView()->setErrorId(message->errorId); - } + getView()->setErrorId(message->errorId); return; } diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp index d78ec67b..837e2d42 100644 --- a/src/lib_gui/qt/element/QtCodeArea.cpp +++ b/src/lib_gui/qt/element/QtCodeArea.cpp @@ -17,6 +17,7 @@ #include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusOut.h" #include "utility/messaging/type/MessageMoveIDECursor.h" +#include "utility/messaging/type/MessageShowErrors.h" #include "utility/utility.h" #include "data/location/TokenLocation.h" @@ -500,8 +501,15 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) QTextCursor cursor = this->cursorForPosition(event->pos()); std::vector annotations = getInteractiveAnnotationsForPosition(cursor.position()); - activateTokenLocations(annotations); - activateLocalSymbols(annotations); + if (m_navigator->hasErrors()) + { + activateErrors(annotations); + } + else + { + activateTokenLocations(annotations); + activateLocalSymbols(annotations); + } } } } @@ -551,7 +559,7 @@ void QtCodeArea::mouseMoveEvent(QMouseEvent* event) setHoveredAnnotations(annotations); - if (annotations.size() == 1) + if (m_navigator->hasErrors() && annotations.size() == 1) { std::string errorMessage = m_navigator->getErrorMessageForId(annotations[0]->tokenId); QToolTip::showText(event->globalPos(), QString::fromStdString(errorMessage)); @@ -702,12 +710,29 @@ void QtCodeArea::activateLocalSymbols(const std::vector& anno } } - if (!allActive || !localSymbolIds.size()) + if (!allActive || localSymbolIds.size()) { MessageActivateLocalSymbols(localSymbolIds).dispatch(); } } +void QtCodeArea::activateErrors(const std::vector& annotations) +{ + std::vector errorIds; + for (const Annotation* annotation : annotations) + { + if (annotation->locationType == LOCATION_ERROR && annotation->tokenId > 0) + { + errorIds.push_back(annotation->tokenId); + } + } + + if (errorIds.size() == 1) + { + MessageShowErrors(errorIds[0]).dispatch(); + } +} + void QtCodeArea::createAnnotations(std::shared_ptr locationFile) { locationFile->forEachStartTokenLocation( diff --git a/src/lib_gui/qt/element/QtCodeArea.h b/src/lib_gui/qt/element/QtCodeArea.h index d44df900..d493af5f 100644 --- a/src/lib_gui/qt/element/QtCodeArea.h +++ b/src/lib_gui/qt/element/QtCodeArea.h @@ -145,6 +145,7 @@ private: std::vector getInteractiveAnnotationsForPosition(int pos) const; void activateTokenLocations(const std::vector& annotations); void activateLocalSymbols(const std::vector& annotations); + void activateErrors(const std::vector& annotations); void createAnnotations(std::shared_ptr locationFile); void annotateText();