Debugger: Fix display of location marker when switching perspectives

Fixes: QTCREATORBUG-21362
Change-Id: I9bc1f0931ea902d04ab256774347b63c1fc64262
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2018-11-09 11:36:28 +01:00
parent deef478b38
commit 18e73a738b
4 changed files with 20 additions and 18 deletions

View File

@@ -1070,9 +1070,11 @@ void DebuggerEngine::gotoLocation(const Location &loc)
void DebuggerEngine::gotoCurrentLocation() void DebuggerEngine::gotoCurrentLocation()
{ {
int top = stackHandler()->currentIndex(); if (d->m_state == InferiorStopOk || d->m_state == InferiorUnrunnable) {
if (top >= 0) int top = stackHandler()->currentIndex();
gotoLocation(stackHandler()->currentFrame()); if (top >= 0)
gotoLocation(stackHandler()->currentFrame());
}
} }
const DebuggerRunParameters &DebuggerEngine::runParameters() const 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) static bool isAllowedTransition(DebuggerState from, DebuggerState to)
{ {
switch (from) { switch (from) {

View File

@@ -366,6 +366,7 @@ public:
void gotoCurrentLocation(); void gotoCurrentLocation();
virtual void quitDebugger(); // called when pressing the stop button virtual void quitDebugger(); // called when pressing the stop button
void abortDebugger(); void abortDebugger();
void updateUi(bool isCurrentEngine);
bool isPrimaryEngine() const; bool isPrimaryEngine() const;

View File

@@ -337,7 +337,6 @@ void EngineManagerPrivate::activateEngineItem(EngineItem *engineItem)
if (DebuggerEngine *engine = m_currentItem->m_engine) { if (DebuggerEngine *engine = m_currentItem->m_engine) {
newContext.add(engine->languageContext()); newContext.add(engine->languageContext());
newContext.add(engine->debuggerContext()); newContext.add(engine->debuggerContext());
engine->gotoCurrentLocation();
} else { } else {
newContext.add(Context(Constants::C_DEBUGGER_NOTRUNNING)); newContext.add(Context(Constants::C_DEBUGGER_NOTRUNNING));
} }
@@ -355,10 +354,8 @@ void EngineManagerPrivate::selectUiForCurrentEngine()
Perspective *perspective = nullptr; Perspective *perspective = nullptr;
int row = 0; int row = 0;
if (m_currentItem && m_currentItem->m_engine) { if (m_currentItem && m_currentItem->m_engine)
perspective = m_currentItem->m_engine->perspective(); perspective = m_currentItem->m_engine->perspective();
m_currentItem->m_engine->updateState(false);
}
if (m_currentItem) if (m_currentItem)
row = m_engineModel.rootItem()->indexOf(m_currentItem); row = m_engineModel.rootItem()->indexOf(m_currentItem);
@@ -378,19 +375,14 @@ void EngineManagerPrivate::selectUiForCurrentEngine()
QTC_ASSERT(perspective, return); QTC_ASSERT(perspective, return);
perspective->select(); perspective->select();
m_engineModel.rootItem()->forFirstLevelChildren([](EngineItem *engineItem) { m_engineModel.rootItem()->forFirstLevelChildren([this](EngineItem *engineItem) {
if (engineItem && engineItem->m_engine) if (engineItem && engineItem->m_engine)
engineItem->m_engine->updateMarkers(); engineItem->m_engine->updateUi(engineItem == m_currentItem);
}); });
emit theEngineManager->currentEngineChanged(); emit theEngineManager->currentEngineChanged();
} }
void EngineManager::selectUiForCurrentEngine()
{
d->selectUiForCurrentEngine();
}
EngineItem *EngineManagerPrivate::findEngineItem(DebuggerEngine *engine) EngineItem *EngineManagerPrivate::findEngineItem(DebuggerEngine *engine)
{ {
return m_engineModel.rootItem()->findFirstLevelChild([engine](EngineItem *engineItem) { return m_engineModel.rootItem()->findFirstLevelChild([engine](EngineItem *engineItem) {

View File

@@ -27,8 +27,6 @@
#include <utils/treemodel.h> #include <utils/treemodel.h>
#include <QAbstractTableModel>
#include <QComboBox>
#include <QPointer> #include <QPointer>
namespace Debugger { namespace Debugger {
@@ -56,8 +54,6 @@ public:
static QList<QPointer<DebuggerEngine> > engines(); static QList<QPointer<DebuggerEngine> > engines();
static QPointer<DebuggerEngine> currentEngine(); static QPointer<DebuggerEngine> currentEngine();
static void selectUiForCurrentEngine();
static QWidget *engineChooser(); static QWidget *engineChooser();
signals: signals: