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,10 +1070,12 @@ void DebuggerEngine::gotoLocation(const Location &loc)
void DebuggerEngine::gotoCurrentLocation()
{
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) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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: