diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index b658a94f13e..9fed9ac586f 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -397,11 +397,7 @@ public: void selectThread(int index) { const Thread thread = m_engine->threadsHandler()->rootItem()->childAt(index); - QTC_ASSERT(thread, return); - // For immediate visual feedback. - m_engine->threadsHandler()->setCurrentThread(thread); - // Initiate the actual switching in the debugger backend. - m_engine->selectThread(thread); + m_engine->doSelectThread(thread); } void handleOperateByInstructionTriggered(bool on) @@ -2082,6 +2078,16 @@ void DebuggerEngine::assignValueInDebugger(WatchItem *, { } +void DebuggerEngine::doSelectThread(const Thread &thread) +{ + QTC_ASSERT(thread, return); + // For immediate visual feedback. + d->m_threadsHandler.setCurrentThread(thread); + d->m_threadBox->setCurrentIndex(d->m_threadsHandler.currentThreadIndex()); + // Initiate the actual switching in the debugger backend. + selectThread(thread); +} + void DebuggerEngine::handleRecordReverse(bool record) { executeRecordReverse(record); diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index ec5ae85f0e4..def30d2c04e 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -317,6 +317,7 @@ public: virtual void assignValueInDebugger(WatchItem *item, const QString &expr, const QVariant &value); virtual void selectThread(const Internal::Thread &thread) = 0; + void doSelectThread(const Internal::Thread &thread); virtual void executeRecordReverse(bool) {} virtual void executeReverse(bool) {} diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp index 4e0408bf06f..5a5a353aacc 100644 --- a/src/plugins/debugger/threadshandler.cpp +++ b/src/plugins/debugger/threadshandler.cpp @@ -240,7 +240,8 @@ bool ThreadsHandler::setData(const QModelIndex &idx, const QVariant &data, int r { if (role == BaseTreeView::ItemActivatedRole) { const Thread thread = itemForIndexAtLevel<1>(idx); - m_engine->selectThread(thread); + if (thread != m_currentThread) + m_engine->doSelectThread(thread); return true; }