diff --git a/src/lib_gui/qt/graphics/GraphFocusHandler.cpp b/src/lib_gui/qt/graphics/GraphFocusHandler.cpp index 7d25a04e..05a12858 100644 --- a/src/lib_gui/qt/graphics/GraphFocusHandler.cpp +++ b/src/lib_gui/qt/graphics/GraphFocusHandler.cpp @@ -91,19 +91,21 @@ void GraphFocusHandler::focusTokenId( void GraphFocusHandler::refocusNode( const std::list& newNodes, Id oldActiveTokenId, Id newActiveTokenId) { - const Id lastFocusId = m_lastFocusId; - clear(); - - if (lastFocusId && (lastFocusId == newActiveTokenId || oldActiveTokenId == newActiveTokenId)) + if (m_lastFocusId && (m_lastFocusId == newActiveTokenId || oldActiveTokenId == newActiveTokenId)) { - QtGraphNode* nodeToFocus = QtGraphNode::findNodeRecursive(newNodes, lastFocusId); + QtGraphNode* nodeToFocus = QtGraphNode::findNodeRecursive(newNodes, m_lastFocusId); if (nodeToFocus) { - m_focusNode = nodeToFocus; - m_lastFocusId = lastFocusId; - nodeToFocus->setIsFocused(true); + if (m_focusNode != nodeToFocus) + { + m_focusNode = nodeToFocus; + nodeToFocus->setIsFocused(true); + } + return; } } + + clear(); } void GraphFocusHandler::focusNext(Direction direction, bool navigateEdges) @@ -180,6 +182,11 @@ void GraphFocusHandler::focusNode(QtGraphNode* node) void GraphFocusHandler::defocusNode(QtGraphNode* node) { + if (node != m_focusNode) + { + return; + } + QtGraphNode* parent = node->getParent(); while (parent && !parent->isFocusable()) { diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 51c5051a..93d8b6ce 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -937,6 +937,8 @@ void QtGraphView::updateTrailButtons() void QtGraphView::switchToNewGraphData() { + m_focusHandler.refocusNode(m_nodes, 0, 0); + m_oldGraph = m_graph; for (QtGraphNode* node: m_oldNodes)