summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-11-09 11:36:28 +0100
committerhjk <hjk@qt.io>2018-11-14 13:08:54 +0000
commit18e73a738be659bbc33306d800324a89c34b8f17 (patch)
treee7cdd5151b6b1c7086cb1f87dd07433b0b436a68
parentdeef478b3823da3c832a66a15c5d19fce377f6bd (diff)
downloadqt-creator-18e73a738be659bbc33306d800324a89c34b8f17.tar.gz
Debugger: Fix display of location marker when switching perspectives
Fixes: QTCREATORBUG-21362 Change-Id: I9bc1f0931ea902d04ab256774347b63c1fc64262 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/debugger/debuggerengine.cpp19
-rw-r--r--src/plugins/debugger/debuggerengine.h1
-rw-r--r--src/plugins/debugger/enginemanager.cpp14
-rw-r--r--src/plugins/debugger/enginemanager.h4
4 files changed, 20 insertions, 18 deletions
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index a0e97ec8c9..75bd17ea8e 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1070,9 +1070,11 @@ void DebuggerEngine::gotoLocation(const Location &loc)
void DebuggerEngine::gotoCurrentLocation()
{
- int top = stackHandler()->currentIndex();
- if (top >= 0)
- gotoLocation(stackHandler()->currentFrame());
+ if (d->m_state == InferiorStopOk || d->m_state == InferiorUnrunnable) {
+ int top = stackHandler()->currentIndex();
+ if (top >= 0)
+ gotoLocation(stackHandler()->currentFrame());
+ }
}
const DebuggerRunParameters &DebuggerEngine::runParameters() const
@@ -1110,6 +1112,17 @@ void DebuggerEngine::abortDebugger()
}
}
+void DebuggerEngine::updateUi(bool isCurrentEngine)
+{
+ updateState(false);
+ if (isCurrentEngine) {
+ gotoCurrentLocation();
+ } else {
+ d->m_locationMark.reset();
+ d->m_disassemblerAgent.resetLocation();
+ }
+}
+
static bool isAllowedTransition(DebuggerState from, DebuggerState to)
{
switch (from) {
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index fad3212bf6..12e4356ce0 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -366,6 +366,7 @@ public:
void gotoCurrentLocation();
virtual void quitDebugger(); // called when pressing the stop button
void abortDebugger();
+ void updateUi(bool isCurrentEngine);
bool isPrimaryEngine() const;
diff --git a/src/plugins/debugger/enginemanager.cpp b/src/plugins/debugger/enginemanager.cpp
index 9a14ffaa29..68f800c5b1 100644
--- a/src/plugins/debugger/enginemanager.cpp
+++ b/src/plugins/debugger/enginemanager.cpp
@@ -337,7 +337,6 @@ void EngineManagerPrivate::activateEngineItem(EngineItem *engineItem)
if (DebuggerEngine *engine = m_currentItem->m_engine) {
newContext.add(engine->languageContext());
newContext.add(engine->debuggerContext());
- engine->gotoCurrentLocation();
} else {
newContext.add(Context(Constants::C_DEBUGGER_NOTRUNNING));
}
@@ -355,10 +354,8 @@ void EngineManagerPrivate::selectUiForCurrentEngine()
Perspective *perspective = nullptr;
int row = 0;
- if (m_currentItem && m_currentItem->m_engine) {
+ if (m_currentItem && m_currentItem->m_engine)
perspective = m_currentItem->m_engine->perspective();
- m_currentItem->m_engine->updateState(false);
- }
if (m_currentItem)
row = m_engineModel.rootItem()->indexOf(m_currentItem);
@@ -378,19 +375,14 @@ void EngineManagerPrivate::selectUiForCurrentEngine()
QTC_ASSERT(perspective, return);
perspective->select();
- m_engineModel.rootItem()->forFirstLevelChildren([](EngineItem *engineItem) {
+ m_engineModel.rootItem()->forFirstLevelChildren([this](EngineItem *engineItem) {
if (engineItem && engineItem->m_engine)
- engineItem->m_engine->updateMarkers();
+ engineItem->m_engine->updateUi(engineItem == m_currentItem);
});
emit theEngineManager->currentEngineChanged();
}
-void EngineManager::selectUiForCurrentEngine()
-{
- d->selectUiForCurrentEngine();
-}
-
EngineItem *EngineManagerPrivate::findEngineItem(DebuggerEngine *engine)
{
return m_engineModel.rootItem()->findFirstLevelChild([engine](EngineItem *engineItem) {
diff --git a/src/plugins/debugger/enginemanager.h b/src/plugins/debugger/enginemanager.h
index 1107a7f100..a41f13183a 100644
--- a/src/plugins/debugger/enginemanager.h
+++ b/src/plugins/debugger/enginemanager.h
@@ -27,8 +27,6 @@
#include <utils/treemodel.h>
-#include <QAbstractTableModel>
-#include <QComboBox>
#include <QPointer>
namespace Debugger {
@@ -56,8 +54,6 @@ public:
static QList<QPointer<DebuggerEngine> > engines();
static QPointer<DebuggerEngine> currentEngine();
- static void selectUiForCurrentEngine();
-
static QWidget *engineChooser();
signals: