forked from qt-creator/qt-creator
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:
@@ -1070,9 +1070,11 @@ 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) {
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user