Debugger: Do not remember persistent layout settings per engine

Fixes: QTCREATORBUG-21006
Change-Id: Id3c2062eb5b42808d666f0fc3620a82666fe14a2
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2018-09-04 13:29:15 +02:00
parent 892be5a70c
commit bdc1ea1d74
9 changed files with 317 additions and 268 deletions

View File

@@ -288,7 +288,6 @@ public:
this, [this] { updateState(true); });
}
~DebuggerEnginePrivate()
{
destroyPerspective();
@@ -324,6 +323,9 @@ public:
if (!m_perspective)
return;
delete m_perspective;
m_perspective = nullptr;
EngineManager::unregisterEngine(m_engine);
// Give up ownership on claimed breakpoints.
@@ -331,9 +333,6 @@ public:
m_toolTipManager.deregisterEngine();
m_memoryAgents.handleDebuggerFinished();
delete m_perspective;
m_perspective = nullptr;
setBusyCursor(false);
}
@@ -419,6 +418,7 @@ public:
void updateReverseActions();
DebuggerEngine *m_engine = nullptr; // Not owned.
QString m_runId;
QPointer<RunConfiguration> m_runConfiguration; // Not owned.
QString m_debuggerName;
Perspective *m_perspective = nullptr;
@@ -518,9 +518,14 @@ void DebuggerEnginePrivate::setupViews()
const DebuggerRunParameters &rp = m_runParameters;
QTC_CHECK(!m_perspective);
const QString perspectiveId = "Debugger.Perspective." + m_debuggerName + '.' + rp.displayName;
m_perspective = new Perspective(perspectiveId, m_engine->displayName(),
Debugger::Constants::PRESET_PERSPECTIVE_ID);
m_perspective = new Perspective("Debugger.Perspective." + m_runId,
m_engine->displayName(),
Debugger::Constants::PRESET_PERSPECTIVE_ID,
m_debuggerName);
m_perspective->setShouldPersistChecker([this] {
return EngineManager::isLastOf(m_debuggerName);
});
m_progress.setProgressRange(0, 1000);
FutureProgress *fp = ProgressManager::addTask(m_progress.future(),
@@ -562,10 +567,6 @@ void DebuggerEnginePrivate::setupViews()
QSettings *settings = ICore::settings();
auto dockId = [perspectiveId](const QString &dockname) {
return QString(dockname + '.' + perspectiveId);
};
m_modulesView = new BaseTreeView;
m_modulesView->setModel(m_modulesHandler.model());
m_modulesView->setSortingEnabled(true);
@@ -574,7 +575,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadModules,
Qt::QueuedConnection);
m_modulesWindow = addSearch(m_modulesView);
m_modulesWindow->setObjectName(dockId(DOCKWIDGET_MODULES));
m_modulesWindow->setObjectName(DOCKWIDGET_MODULES);
m_modulesWindow->setWindowTitle(tr("&Modules"));
m_registerView = new BaseTreeView;
@@ -585,7 +586,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadRegisters,
Qt::QueuedConnection);
m_registerWindow = addSearch(m_registerView);
m_registerWindow->setObjectName(dockId(DOCKWIDGET_REGISTER));
m_registerWindow->setObjectName(DOCKWIDGET_REGISTER);
m_registerWindow->setWindowTitle(tr("Reg&isters"));
m_stackView = new BaseTreeView;
@@ -593,7 +594,7 @@ void DebuggerEnginePrivate::setupViews()
m_stackView->setSettings(settings, "Debugger.StackView");
m_stackView->setIconSize(QSize(10, 10));
m_stackWindow = addSearch(m_stackView);
m_stackWindow->setObjectName(dockId(DOCKWIDGET_STACK));
m_stackWindow->setObjectName(DOCKWIDGET_STACK);
m_stackWindow->setWindowTitle(tr("&Stack"));
m_sourceFilesView = new BaseTreeView;
@@ -604,7 +605,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadSourceFiles,
Qt::QueuedConnection);
m_sourceFilesWindow = addSearch(m_sourceFilesView);
m_sourceFilesWindow->setObjectName(dockId(DOCKWIDGET_SOURCE_FILES));
m_sourceFilesWindow->setObjectName(DOCKWIDGET_SOURCE_FILES);
m_sourceFilesWindow->setWindowTitle(tr("Source Files"));
m_threadsView = new BaseTreeView;
@@ -613,13 +614,13 @@ void DebuggerEnginePrivate::setupViews()
m_threadsView->setSettings(settings, "Debugger.ThreadsView");
m_threadsView->setIconSize(QSize(10, 10));
m_threadsWindow = addSearch(m_threadsView);
m_threadsWindow->setObjectName(dockId(DOCKWIDGET_THREADS));
m_threadsWindow->setObjectName(DOCKWIDGET_THREADS);
m_threadsWindow->setWindowTitle(tr("&Threads"));
m_returnView = new WatchTreeView{ReturnType};
m_returnView->setModel(m_watchHandler.model());
m_returnWindow = addSearch(m_returnView);
m_returnWindow->setObjectName(dockId("CppDebugReturn"));
m_returnWindow->setObjectName("CppDebugReturn");
m_returnWindow->setWindowTitle(tr("Locals"));
m_returnWindow->setVisible(false);
@@ -627,26 +628,26 @@ void DebuggerEnginePrivate::setupViews()
m_localsView->setModel(m_watchHandler.model());
m_localsView->setSettings(settings, "Debugger.LocalsView");
m_localsWindow = addSearch(m_localsView);
m_localsWindow->setObjectName(dockId("CppDebugLocals"));
m_localsWindow->setObjectName("CppDebugLocals");
m_localsWindow->setWindowTitle(tr("Locals"));
m_inspectorView = new WatchTreeView{InspectType};
m_inspectorView->setModel(m_watchHandler.model());
m_inspectorView->setSettings(settings, "Debugger.LocalsView"); // sic! same as locals view.
m_inspectorWindow = addSearch(m_inspectorView);
m_inspectorWindow->setObjectName(dockId("Inspector"));
m_inspectorWindow->setObjectName("Inspector");
m_inspectorWindow->setWindowTitle(tr("Locals"));
m_watchersView = new WatchTreeView{WatchersType};
m_watchersView->setModel(m_watchHandler.model());
m_watchersView->setSettings(settings, "Debugger.WatchersView");
m_watchersWindow = addSearch(m_watchersView);
m_watchersWindow->setObjectName(dockId("CppDebugWatchers"));
m_watchersWindow->setObjectName("CppDebugWatchers");
m_watchersWindow->setWindowTitle(tr("&Expressions"));
m_localsAndInspectorWindow = new LocalsAndInspectorWindow(
m_localsWindow, m_inspectorWindow, m_returnWindow);
m_localsAndInspectorWindow->setObjectName(dockId(DOCKWIDGET_LOCALS_AND_INSPECTOR));
m_localsAndInspectorWindow->setObjectName(DOCKWIDGET_LOCALS_AND_INSPECTOR);
m_localsAndInspectorWindow->setWindowTitle(m_localsWindow->windowTitle());
// Locals
@@ -663,10 +664,10 @@ void DebuggerEnginePrivate::setupViews()
m_breakView->setModel(m_breakHandler.model());
m_breakView->setRootIsDecorated(true);
m_breakWindow = addSearch(m_breakView);
m_breakWindow->setObjectName(dockId(DOCKWIDGET_BREAK));
m_breakWindow->setObjectName(DOCKWIDGET_BREAK);
m_breakWindow->setWindowTitle(tr("&Breakpoints"));
m_perspective->addToolBarWidget(EngineManager::engineChooser());
m_perspective->addToolBarSwitcher(EngineManager::engineChooser(), false);
m_perspective->addToolBarAction(&m_continueAction);
m_perspective->addToolBarAction(&m_interruptAction);
@@ -798,6 +799,11 @@ void DebuggerEngine::setDebuggerName(const QString &name)
d->m_debuggerName = name;
}
QString DebuggerEngine::debuggerName() const
{
return d->m_debuggerName;
}
QString DebuggerEngine::stateName(int s)
{
# define SN(x) case x: return QLatin1String(#x);
@@ -930,6 +936,11 @@ void DebuggerEngine::setRunParameters(const DebuggerRunParameters &runParameters
d->m_runParameters = runParameters;
}
void DebuggerEngine::setRunId(const QString &id)
{
d->m_runId = id;
}
void DebuggerEngine::setRunTool(DebuggerRunTool *runTool)
{
RunControl *runControl = runTool->runControl();
@@ -2444,6 +2455,11 @@ void DebuggerEngine::startDying() const
other->d->m_isDying = true;
}
QString DebuggerEngine::runId() const
{
return d->m_runId;
}
bool DebuggerRunParameters::isCppDebugging() const
{
return cppEngineType == GdbEngineType