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()
|
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) {
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user