diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 65e4b051..ea52bb51 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -258,6 +258,14 @@ void CodeController::handleMessage(MessageClearErrorCount* message) } } +void CodeController::handleMessage(MessageDeactivateEdge* message) +{ + if (message->scrollToDefinition) + { + getView()->scrollToDefinition(true); + } +} + void CodeController::handleMessage(MessageFlushUpdates* message) { MessageCodeViewExpandedInitialFiles* msgPtr = nullptr; @@ -280,7 +288,7 @@ void CodeController::handleMessage(MessageCodeViewExpandedInitialFiles* message) { if (m_scrollToDefinition || (message && message->scrollToDefinition)) { - getView()->scrollToDefinition(); + getView()->scrollToDefinition(false); m_scrollToDefinition = false; } diff --git a/src/lib/component/controller/CodeController.h b/src/lib/component/controller/CodeController.h index 8be7027c..2dd5a530 100644 --- a/src/lib/component/controller/CodeController.h +++ b/src/lib/component/controller/CodeController.h @@ -11,6 +11,7 @@ #include "utility/messaging/type/MessageChangeFileView.h" #include "utility/messaging/type/MessageClearErrorCount.h" #include "utility/messaging/type/MessageCodeViewExpandedInitialFiles.h" +#include "utility/messaging/type/MessageDeactivateEdge.h" #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusOut.h" @@ -38,6 +39,7 @@ class CodeController , public MessageListener , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -60,6 +62,7 @@ private: virtual void handleMessage(MessageChangeFileView* message); virtual void handleMessage(MessageClearErrorCount* message); virtual void handleMessage(MessageCodeViewExpandedInitialFiles* message); + virtual void handleMessage(MessageDeactivateEdge* message); virtual void handleMessage(MessageFlushUpdates* message); virtual void handleMessage(MessageFocusIn* message); virtual void handleMessage(MessageFocusOut* message); diff --git a/src/lib/component/view/CodeView.h b/src/lib/component/view/CodeView.h index 07949120..6ad6e0cc 100644 --- a/src/lib/component/view/CodeView.h +++ b/src/lib/component/view/CodeView.h @@ -52,7 +52,7 @@ public: virtual void scrollToValue(int value, bool inListMode) = 0; virtual void scrollToLine(const FilePath filePath, unsigned int line) = 0; - virtual void scrollToDefinition() = 0; + virtual void scrollToDefinition(bool ignoreActiveReference) = 0; private: CodeController* getController(); diff --git a/src/lib/utility/messaging/type/MessageDeactivateEdge.h b/src/lib/utility/messaging/type/MessageDeactivateEdge.h index 503aea42..9dfafb3a 100644 --- a/src/lib/utility/messaging/type/MessageDeactivateEdge.h +++ b/src/lib/utility/messaging/type/MessageDeactivateEdge.h @@ -7,7 +7,8 @@ class MessageDeactivateEdge : public Message { public: - MessageDeactivateEdge() + MessageDeactivateEdge(bool scrollToDefinition) + : scrollToDefinition(scrollToDefinition) { } @@ -15,6 +16,8 @@ public: { return "MessageDeactivateEdge"; } + + bool scrollToDefinition; }; #endif // MESSAGE_DEACTIVATE_EDGE_H diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index f66af649..9f6454fe 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -532,8 +532,15 @@ void QtCodeNavigator::scrollToLine(const FilePath& filePath, unsigned int line) requestScroll(filePath, line, 0, false, false); } -void QtCodeNavigator::scrollToDefinition() +void QtCodeNavigator::scrollToDefinition(bool ignoreActiveReference) { + if (ignoreActiveReference) + { + m_activeReference = Reference(); + m_refIndex = 0; + updateRefLabel(); + } + if (m_activeReference.tokenId) { if (m_mode == MODE_LIST) diff --git a/src/lib_gui/qt/element/QtCodeNavigator.h b/src/lib_gui/qt/element/QtCodeNavigator.h index 60a06bc0..98f1f7d2 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.h +++ b/src/lib_gui/qt/element/QtCodeNavigator.h @@ -80,7 +80,7 @@ public: void scrollToValue(int value, bool inListMode); void scrollToLine(const FilePath& filePath, unsigned int line); - void scrollToDefinition(); + void scrollToDefinition(bool ignoreActiveReference); void scrollToSnippetIfRequested(); diff --git a/src/lib_gui/qt/view/QtCodeView.cpp b/src/lib_gui/qt/view/QtCodeView.cpp index cd37537e..86d51a90 100644 --- a/src/lib_gui/qt/view/QtCodeView.cpp +++ b/src/lib_gui/qt/view/QtCodeView.cpp @@ -165,12 +165,12 @@ void QtCodeView::scrollToLine(const FilePath filePath, unsigned int line) ); } -void QtCodeView::scrollToDefinition() +void QtCodeView::scrollToDefinition(bool ignoreActiveReference) { m_onQtThread( [=]() { - m_widget->scrollToDefinition(); + m_widget->scrollToDefinition(ignoreActiveReference); } ); } diff --git a/src/lib_gui/qt/view/QtCodeView.h b/src/lib_gui/qt/view/QtCodeView.h index 51b7676f..53181597 100644 --- a/src/lib_gui/qt/view/QtCodeView.h +++ b/src/lib_gui/qt/view/QtCodeView.h @@ -50,7 +50,7 @@ public: virtual void scrollToValue(int value, bool inListMode); virtual void scrollToLine(const FilePath filePath, unsigned int line); - virtual void scrollToDefinition(); + virtual void scrollToDefinition(bool ignoreActiveReference); private: void doShowCodeSnippets( diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 60889692..c151cf02 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -153,7 +153,7 @@ void QtGraphView::clickedInEmptySpace() if (activeEdgeCount == 1) { - MessageDeactivateEdge().dispatch(); + MessageDeactivateEdge(false).dispatch(); } } diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp index 52540839..0cd2cf71 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp @@ -81,7 +81,7 @@ void QtGraphNodeData::onClick() { if (m_isActive && !m_multipleActive) { - MessageDeactivateEdge().dispatch(); + MessageDeactivateEdge(true).dispatch(); return; }