From 6321e4ebfeb7fee3d85b3622c7c364d1f1c5ea14 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 10 Mar 2010 13:46:05 +0100
Subject: [PATCH] debugger: closer dependency plugin<->manager, less
 signal/slot connections

---
 src/plugins/debugger/debuggermanager.cpp |  56 +++++-----
 src/plugins/debugger/debuggermanager.h   |  13 +--
 src/plugins/debugger/debuggerplugin.cpp  | 134 ++++++++++-------------
 src/plugins/debugger/debuggerplugin.h    |  10 +-
 4 files changed, 91 insertions(+), 122 deletions(-)

diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 7f0ead327a8..ebe0b19660e 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -29,6 +29,7 @@
 
 #include "debuggermanager.h"
 
+#include "debuggerplugin.h"
 #include "debuggeractions.h"
 #include "debuggeragents.h"
 #include "debuggerrunner.h"
@@ -305,6 +306,7 @@ struct DebuggerManagerPrivate
     DebuggerState m_state;
 
     CPlusPlus::Snapshot m_codeModelSnapshot;
+    DebuggerPlugin *m_plugin;
 };
 
 DebuggerManager *DebuggerManagerPrivate::instance = 0;
@@ -322,10 +324,11 @@ DebuggerManagerPrivate::DebuggerManagerPrivate(DebuggerManager *manager) :
     m_stopIcon.addFile(":/debugger/images/debugger_stop.png");
 }
 
-DebuggerManager::DebuggerManager()
+DebuggerManager::DebuggerManager(DebuggerPlugin *plugin)
   : d(new DebuggerManagerPrivate(this))
 {
     DebuggerManagerPrivate::instance = this;
+    d->m_plugin = plugin;
     init();
 }
 
@@ -564,17 +567,17 @@ void DebuggerManager::init()
         this, SLOT(reloadModules()), Qt::QueuedConnection);
 
     d->m_registerDock = uiSwitcher->createDockWidget(LANG_CPP, d->m_registerWindow,
-                                                                      Qt::TopDockWidgetArea, false);
+        Qt::TopDockWidgetArea, false);
     connect(d->m_registerDock->toggleViewAction(), SIGNAL(toggled(bool)),
         this, SLOT(reloadRegisters()), Qt::QueuedConnection);
 
     d->m_outputDock = uiSwitcher->createDockWidget(LANG_CPP, d->m_outputWindow,
-                                                                    Qt::TopDockWidgetArea, false);
+        Qt::TopDockWidgetArea, false);
 
     d->m_snapshotDock =  uiSwitcher->createDockWidget(LANG_CPP, d->m_snapshotWindow);
     d->m_stackDock = uiSwitcher->createDockWidget(LANG_CPP, d->m_stackWindow);
-    d->m_sourceFilesDock = uiSwitcher->createDockWidget(LANG_CPP, d->m_sourceFilesWindow,
-                                                                         Qt::TopDockWidgetArea, false);
+    d->m_sourceFilesDock = uiSwitcher->createDockWidget(LANG_CPP,
+        d->m_sourceFilesWindow, Qt::TopDockWidgetArea, false);
     connect(d->m_sourceFilesDock->toggleViewAction(), SIGNAL(toggled(bool)),
         this, SLOT(reloadSourceFiles()), Qt::QueuedConnection);
 
@@ -588,7 +591,8 @@ void DebuggerManager::init()
     localsAndWatchers->setStretchFactor(0, 3);
     localsAndWatchers->setStretchFactor(1, 1);
     localsAndWatchers->setStretchFactor(2, 1);
-    d->m_watchDock = DebuggerUISwitcher::instance()->createDockWidget(LANG_CPP, localsAndWatchers);
+    d->m_watchDock = DebuggerUISwitcher::instance()->createDockWidget(LANG_CPP,
+        localsAndWatchers);
     d->m_dockWidgets << d->m_breakDock << d->m_modulesDock << d->m_registerDock
                      << d->m_outputDock << d->m_stackDock << d->m_sourceFilesDock
                      << d->m_threadsDock << d->m_watchDock;
@@ -691,7 +695,8 @@ QWidget *DebuggerManager::threadsWindow() const
 
 void DebuggerManager::createNewDock(QWidget *widget)
 {
-    QDockWidget *dockWidget = DebuggerUISwitcher::instance()->createDockWidget(LANG_CPP, widget);
+    QDockWidget *dockWidget =
+        DebuggerUISwitcher::instance()->createDockWidget(LANG_CPP, widget);
     dockWidget->setWindowTitle(widget->windowTitle());
     dockWidget->setObjectName(widget->windowTitle());
     dockWidget->setFeatures(QDockWidget::DockWidgetClosable);
@@ -860,7 +865,7 @@ void DebuggerManager::toggleBreakpoint()
 {
     QString fileName;
     int lineNumber = -1;
-    queryCurrentTextEditor(&fileName, &lineNumber, 0);
+    d->m_plugin->currentTextEditor(&fileName, &lineNumber);
     if (lineNumber == -1)
         return;
     toggleBreakpoint(fileName, lineNumber);
@@ -1047,9 +1052,10 @@ void DebuggerManager::startNewDebugger(const DebuggerStartParametersPtr &sp)
     d->m_startParameters = sp;
     d->m_inferiorPid = d->m_startParameters->attachPID > 0
         ? d->m_startParameters->attachPID : 0;
-    const QString toolChainName = ProjectExplorer::ToolChain::toolChainName(static_cast<ProjectExplorer::ToolChain::ToolChainType>(d->m_startParameters->toolChainType));
+    const QString toolChainName = ProjectExplorer::ToolChain::toolChainName(
+    ProjectExplorer::ToolChain::ToolChainType(d->m_startParameters->toolChainType));
 
-    emit debugModeRequested();
+    d->m_plugin->activateDebugMode();
     showDebuggerOutput(LogStatus,
         tr("Starting debugger for tool chain '%1'...").arg(toolChainName));
     showDebuggerOutput(LogDebug, DebuggerSettings::instance()->dump());
@@ -1347,12 +1353,6 @@ void DebuggerManager::setBusyCursor(bool busy)
     d->m_watchersWindow->setCursor(cursor);
 }
 
-void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber,
-    QObject **object)
-{
-    emit currentTextEditorRequested(fileName, lineNumber, object);
-}
-
 void DebuggerManager::continueExec()
 {
     if (d->m_engine)
@@ -1382,7 +1382,7 @@ void DebuggerManager::runToLineExec()
 {
     QString fileName;
     int lineNumber = -1;
-    emit currentTextEditorRequested(&fileName, &lineNumber, 0);
+    d->m_plugin->currentTextEditor(&fileName, &lineNumber);
     if (d->m_engine && !fileName.isEmpty()) {
         STATE_DEBUG(fileName << lineNumber);
         d->m_engine->runToLineExec(fileName, lineNumber);
@@ -1393,8 +1393,7 @@ void DebuggerManager::runToFunctionExec()
 {
     QString fileName;
     int lineNumber = -1;
-    QObject *object = 0;
-    emit currentTextEditorRequested(&fileName, &lineNumber, &object);
+    QObject *object = d->m_plugin->currentTextEditor(&fileName, &lineNumber);
     QPlainTextEdit *ed = qobject_cast<QPlainTextEdit*>(object);
     if (!ed)
         return;
@@ -1426,7 +1425,7 @@ void DebuggerManager::jumpToLineExec()
 {
     QString fileName;
     int lineNumber = -1;
-    emit currentTextEditorRequested(&fileName, &lineNumber, 0);
+    d->m_plugin->currentTextEditor(&fileName, &lineNumber);
     if (d->m_engine && !fileName.isEmpty()) {
         STATE_DEBUG(fileName << lineNumber);
         d->m_engine->jumpToLineExec(fileName, lineNumber);
@@ -1438,18 +1437,18 @@ void DebuggerManager::resetLocation()
     d->m_disassemblerViewAgent.resetLocation();
     d->m_stackHandler->setCurrentIndex(-1);
     // Connected to the plugin.
-    emit resetLocationRequested();
+    d->m_plugin->resetLocation();
 }
 
-void DebuggerManager::gotoLocation(const Debugger::Internal::StackFrame &frame, bool setMarker)
+void DebuggerManager::gotoLocation(const StackFrame &frame, bool setMarker)
 {
     if (theDebuggerBoolSetting(OperateByInstruction) || !frame.isUsable()) {
         if (setMarker)
-            emit resetLocationRequested();
+            d->m_plugin->resetLocation();
         d->m_disassemblerViewAgent.setFrame(frame);
     } else {
         // Connected to the plugin.
-        emit gotoLocationRequested(frame.file, frame.line, setMarker);
+        d->m_plugin->gotoLocation(frame.file, frame.line, setMarker);
     }
 }
 
@@ -1633,15 +1632,12 @@ bool DebuggerManager::isReverseDebugging() const
 
 QVariant DebuggerManager::sessionValue(const QString &name)
 {
-    // this is answered by the plugin
-    QVariant value;
-    emit sessionValueRequested(name, &value);
-    return value;
+    return d->m_plugin->sessionValue(name);
 }
 
 void DebuggerManager::setSessionValue(const QString &name, const QVariant &value)
 {
-    emit setSessionValueRequested(name, value);
+    d->m_plugin->setSessionValue(name, value);
 }
 
 QMessageBox *DebuggerManager::showMessageBox(int icon, const QString &title,
@@ -1803,7 +1799,7 @@ void DebuggerManager::setState(DebuggerState state, bool forced)
     theDebuggerAction(ExpandStack)->setEnabled(actionsEnabled);
     theDebuggerAction(ExecuteCommand)->setEnabled(d->m_state != DebuggerNotReady);
 
-    emit stateChanged(d->m_state);
+    d->m_plugin->handleStateChanged(d->m_state);
     const bool notbusy = state == InferiorStopped
         || state == DebuggerNotReady
         || state == InferiorUnrunnable;
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 1f74b74c1b9..d5b88016f09 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -87,7 +87,6 @@ class ScriptEngine;
 class CdbDebugEngine;
 class CdbDebugEnginePrivate;
 struct DebuggerManagerActions;
-class DebuggerPlugin;
 class CdbDebugEventCallback;
 class CdbDumperHelper;
 class CdbDumperInitThread;
@@ -158,7 +157,7 @@ class DEBUGGER_EXPORT DebuggerManager : public QObject
     Q_OBJECT
 
 public:
-    DebuggerManager();
+    explicit DebuggerManager(Internal::DebuggerPlugin *plugin);
     ~DebuggerManager();
 
     friend class Internal::IDebuggerEngine;
@@ -207,7 +206,6 @@ public slots:
     void setSimpleDockWidgetArrangement(const QString &activeLanguage);
 
     void setBusyCursor(bool on);
-    void queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **ed);
 
     void gotoLocation(const Debugger::Internal::StackFrame &frame, bool setLocationMarker);
     void fileOpen(const QString &file);
@@ -330,16 +328,7 @@ signals:
     void debuggingFinished();
     void inferiorPidChanged(qint64 pid);
     void stateChanged(int newstatus);
-    void debugModeRequested();
-    void previousModeRequested();
     void statusMessageRequested(const QString &msg, int timeout); // -1 for 'forever'
-    void gotoLocationRequested(const QString &file, int line, bool setLocationMarker);
-    void resetLocationRequested();
-    void currentTextEditorRequested(QString *fileName, int *lineNumber, QObject **ob);
-    void sessionValueRequested(const QString &name, QVariant *value);
-    void setSessionValueRequested(const QString &name, const QVariant &value);
-    void configValueRequested(const QString &name, QVariant *value);
-    void setConfigValueRequested(const QString &name, const QVariant &value);
     void applicationOutputAvailable(const QString &output);
     void emitShowOutput(int channel, const QString &output);
     void emitShowInput(int channel, const QString &input);
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 4581181eaec..12b0efc6416 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -86,6 +86,7 @@
 #include <QtCore/QtPlugin>
 #include <QtCore/QCoreApplication>
 #include <QtCore/QTimer>
+#include <QtCore/QVariant>
 
 #include <QtGui/QLineEdit>
 #include <QtGui/QDockWidget>
@@ -674,11 +675,6 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
     ExtensionSystem::PluginManager::instance()->addObject(m_uiSwitcher);
     m_uiSwitcher->addLanguage(LANG_CPP);
 
-    m_manager = new DebuggerManager;
-    ExtensionSystem::PluginManager::instance()->addObject(m_manager);
-    const QList<Core::IOptionsPage *> engineOptionPages =
-        m_manager->initializeEngines(m_cmdLineEnabledEngines);
-
     ICore *core = ICore::instance();
     QTC_ASSERT(core, return false);
 
@@ -705,8 +701,13 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
 
     m_gdbRunningContext = uidm->uniqueIdentifier(Constants::GDBRUNNING);
 
+    DebuggerManager *manager = new DebuggerManager(this);
+    ExtensionSystem::PluginManager::instance()->addObject(manager);
+    const QList<Core::IOptionsPage *> engineOptionPages =
+        manager->initializeEngines(m_cmdLineEnabledEngines);
+
     // register factory of DebuggerRunControl
-    m_debuggerRunControlFactory = new DebuggerRunControlFactory(m_manager);
+    m_debuggerRunControlFactory = new DebuggerRunControlFactory(manager);
     addAutoReleasedObject(m_debuggerRunControlFactory);
 
     QList<int> context;
@@ -741,13 +742,13 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
     m_detachAction = new QAction(this);
     m_detachAction->setText(tr("Detach Debugger"));
     connect(m_detachAction, SIGNAL(triggered()),
-        m_manager, SLOT(detachDebugger()));
+        manager, SLOT(detachDebugger()));
 
    // Core::ActionContainer *mdebug =
     //    am->actionContainer(ProjectExplorer::Constants::M_DEBUG);
 
     Core::Command *cmd = 0;
-    const DebuggerManagerActions actions = m_manager->debuggerManagerActions();
+    const DebuggerManagerActions actions = manager->debuggerManagerActions();
 
 
     Core::ActionContainer *mstart =
@@ -902,34 +903,33 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
     addAutoReleasedObject(new DebuggerListener);
     m_locationMark = 0;
 
-    m_manager->setSimpleDockWidgetArrangement(LANG_CPP);
+    manager->setSimpleDockWidgetArrangement(LANG_CPP);
     readSettings();
 
-    m_uiSwitcher->setToolbar(LANG_CPP, createToolbar());
-    connect(m_uiSwitcher, SIGNAL(dockArranged(QString)), m_manager,
-            SLOT(setSimpleDockWidgetArrangement(QString)));
-
     connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
             this, SLOT(onModeChanged(Core::IMode*)));
     m_debugMode->widget()->setFocusProxy(EditorManager::instance());
     addObject(m_debugMode);
 
+    m_manager = manager;
+
+
     //
     //  Connections
     //
 
     // TextEditor
-    connect(TextEditor::TextEditorPlugin::instance(),
+    connect(TextEditorPlugin::instance(),
         SIGNAL(fontSettingsChanged(TextEditor::FontSettings)),
-        m_manager, SLOT(fontSettingsChanged(TextEditor::FontSettings)));
+        manager, SLOT(fontSettingsChanged(TextEditor::FontSettings)));
 
     // ProjectExplorer
     connect(sessionManager(), SIGNAL(sessionLoaded()),
-       m_manager, SLOT(sessionLoaded()));
+       manager, SLOT(sessionLoaded()));
     connect(sessionManager(), SIGNAL(aboutToSaveSession()),
-       m_manager, SLOT(aboutToSaveSession()));
+       manager, SLOT(aboutToSaveSession()));
     connect(sessionManager(), SIGNAL(aboutToUnloadSession()),
-       m_manager, SLOT(aboutToUnloadSession()));
+       manager, SLOT(aboutToUnloadSession()));
 
     // EditorManager
     QObject *editorManager = core->editorManager();
@@ -939,60 +939,46 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
         this, SLOT(editorOpened(Core::IEditor*)));
 
     // Application interaction
-    connect(m_manager, SIGNAL(currentTextEditorRequested(QString*,int*,QObject**)),
-        this, SLOT(queryCurrentTextEditor(QString*,int*,QObject**)));
-
-    connect(m_manager, SIGNAL(setSessionValueRequested(QString,QVariant)),
-        this, SLOT(setSessionValue(QString,QVariant)));
-    connect(m_manager, SIGNAL(sessionValueRequested(QString,QVariant*)),
-        this, SLOT(querySessionValue(QString,QVariant*)));
-
-    connect(m_manager, SIGNAL(resetLocationRequested()),
-        this, SLOT(resetLocation()));
-    connect(m_manager, SIGNAL(gotoLocationRequested(QString,int,bool)),
-        this, SLOT(gotoLocation(QString,int,bool)));
-    connect(m_manager, SIGNAL(stateChanged(int)),
-        this, SLOT(handleStateChanged(int)));
-    connect(m_manager, SIGNAL(previousModeRequested()),
-        this, SLOT(activatePreviousMode()));
-    connect(m_manager, SIGNAL(debugModeRequested()),
-        this, SLOT(activateDebugMode()));
-
     connect(theDebuggerAction(SettingsDialog), SIGNAL(triggered()),
         this, SLOT(showSettingsDialog()));
 
     handleStateChanged(DebuggerNotReady);
+
+    m_uiSwitcher->setToolbar(LANG_CPP, createToolbar());
+    connect(m_uiSwitcher, SIGNAL(dockArranged(QString)), manager,
+            SLOT(setSimpleDockWidgetArrangement(QString)));
+
     return true;
 }
 
 QWidget *DebuggerPlugin::createToolbar() const
 {
     Core::ActionManager *am = ICore::instance()->actionManager();
-
     QWidget *toolbarContainer = new QWidget;
-    QHBoxLayout *debugToolBarLayout = new QHBoxLayout(toolbarContainer);
-
-    debugToolBarLayout->setMargin(0);
-    debugToolBarLayout->setSpacing(0);
-    debugToolBarLayout->addWidget(toolButton(am->command(ProjectExplorer::Constants::DEBUG)->action()));
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::INTERRUPT)->action()));
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::NEXT)->action()));
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::STEP)->action()));
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::STEPOUT)->action()));
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::OPERATE_BY_INSTRUCTION)->action()));
+
+    QHBoxLayout *hbox = new QHBoxLayout(toolbarContainer);
+    hbox->setMargin(0);
+    hbox->setSpacing(0);
+    hbox->addWidget(toolButton(am->command(ProjectExplorer::Constants::DEBUG)->action()));
+    hbox->addWidget(toolButton(am->command(Constants::INTERRUPT)->action()));
+    hbox->addWidget(toolButton(am->command(Constants::NEXT)->action()));
+    hbox->addWidget(toolButton(am->command(Constants::STEP)->action()));
+    hbox->addWidget(toolButton(am->command(Constants::STEPOUT)->action()));
+    hbox->addWidget(toolButton(am->command(Constants::OPERATE_BY_INSTRUCTION)->action()));
 #ifdef USE_REVERSE_DEBUGGING
-    debugToolBarLayout->addWidget(new Utils::StyledSeparator);
-    debugToolBarLayout->addWidget(toolButton(am->command(Constants::REVERSE)->action()));
+    hbox->addWidget(new Utils::StyledSeparator);
+    hbox->addWidget(toolButton(am->command(Constants::REVERSE)->action()));
 #endif
-    debugToolBarLayout->addWidget(new Utils::StyledSeparator);
-    debugToolBarLayout->addWidget(new QLabel(tr("Threads:")));
+    hbox->addWidget(new Utils::StyledSeparator);
+    hbox->addWidget(new QLabel(tr("Threads:")));
 
     QComboBox *threadBox = new QComboBox;
     threadBox->setModel(m_manager->threadsModel());
     connect(threadBox, SIGNAL(activated(int)),
         m_manager->threadsWindow(), SIGNAL(threadSelected(int)));
-    debugToolBarLayout->addWidget(threadBox);
-    debugToolBarLayout->addWidget(m_manager->statusLabel(), 10);
+
+    hbox->addWidget(threadBox);
+    hbox->addWidget(m_manager->statusLabel(), 10);
 
     return toolbarContainer;
 }
@@ -1047,21 +1033,20 @@ void DebuggerPlugin::activateDebugMode()
     modeManager->activateMode(QLatin1String(MODE_DEBUG));
 }
 
-void DebuggerPlugin::queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **object)
+QWidget *DebuggerPlugin::currentTextEditor(QString *fileName, int *lineNumber)
 {
     EditorManager *editorManager = EditorManager::instance();
     if (!editorManager)
-        return;
+        return 0;
     Core::IEditor *editor = editorManager->currentEditor();
     ITextEditor *textEditor = qobject_cast<ITextEditor*>(editor);
     if (!textEditor)
-        return;
+        return 0;
     if (fileName)
         *fileName = textEditor->file()->fileName();
     if (lineNumber)
         *lineNumber = textEditor->currentLine();
-    if (object)
-        *object = textEditor->widget();
+    return textEditor->widget();
 }
 
 void DebuggerPlugin::editorOpened(Core::IEditor *editor)
@@ -1140,13 +1125,12 @@ void DebuggerPlugin::breakpointEnableDisableMarginActionTriggered()
     }
 }
 
-void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber)
+void DebuggerPlugin::requestMark(ITextEditor *editor, int lineNumber)
 {
     m_manager->toggleBreakpoint(editor->file()->fileName(), lineNumber);
 }
 
-void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor,
-    const QPoint &point, int pos)
+void DebuggerPlugin::showToolTip(ITextEditor *editor, const QPoint &point, int pos)
 {
     if (!theDebuggerBoolSetting(UseToolTipsInMainEditor)
             || m_manager->state() == DebuggerNotReady)
@@ -1157,19 +1141,16 @@ void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor,
 
 void DebuggerPlugin::setSessionValue(const QString &name, const QVariant &value)
 {
-    //qDebug() << "SET SESSION VALUE" << name << value;
     QTC_ASSERT(sessionManager(), return);
     sessionManager()->setValue(name, value);
 }
 
-void DebuggerPlugin::querySessionValue(const QString &name, QVariant *value)
+QVariant DebuggerPlugin::sessionValue(const QString &name)
 {
-    QTC_ASSERT(sessionManager(), return);
-    *value = sessionManager()->value(name);
-    //qDebug() << "GET SESSION VALUE: " << name << value;
+    QTC_ASSERT(sessionManager(), return QVariant());
+    return sessionManager()->value(name);
 }
 
-
 void DebuggerPlugin::setConfigValue(const QString &name, const QVariant &value)
 {
     QTC_ASSERT(m_debugMode, return);
@@ -1182,12 +1163,6 @@ QVariant DebuggerPlugin::configValue(const QString &name) const
     return settings()->value(name);
 }
 
-void DebuggerPlugin::queryConfigValue(const QString &name, QVariant *value)
-{
-    QTC_ASSERT(m_debugMode, return);
-    *value = settings()->value(name);
-}
-
 void DebuggerPlugin::resetLocation()
 {
     //qDebug() << "RESET_LOCATION: current:"  << currentTextEditor();
@@ -1200,7 +1175,12 @@ void DebuggerPlugin::resetLocation()
 void DebuggerPlugin::gotoLocation(const QString &file, int line, bool setMarker)
 {
     bool newEditor = false;
-    TextEditor::BaseTextEditor::openEditorAt(file, line, 0, QString(), &newEditor);
+    ITextEditor *editor =
+        BaseTextEditor::openEditorAt(file, line, 0, QString(), &newEditor);
+    if (!editor)
+        return;
+    if (newEditor)
+        editor->setProperty("OpenedByDebugger", true);
     if (setMarker) {
         resetLocation();
         m_locationMark = new LocationMark(file, line);
@@ -1209,6 +1189,10 @@ void DebuggerPlugin::gotoLocation(const QString &file, int line, bool setMarker)
 
 void DebuggerPlugin::handleStateChanged(int state)
 {
+    // Prevent it from beeing triggered on setup.
+    if (!m_manager)
+        return;
+
     const bool startIsContinue = (state == InferiorStopped);
     ICore *core = ICore::instance();
     if (startIsContinue) {
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 7748afddd7a..58c96eaa8ab 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -89,20 +89,20 @@ private:
     virtual void remoteCommand(const QStringList &options, const QStringList &arguments);
 
     QVariant configValue(const QString &name) const;
+    QWidget *currentTextEditor(QString *fileName, int *line);
+    QVariant sessionValue(const QString &name);
+    void setSessionValue(const QString &name, const QVariant &value);
+    QVariant configValue(const QString &name);
+    void setConfigValue(const QString &name, const QVariant &value);
 
 private slots:
     void activatePreviousMode();
     void activateDebugMode();
-    void queryCurrentTextEditor(QString *fileName, int *line, QObject **object);
     void editorOpened(Core::IEditor *);
     void editorAboutToClose(Core::IEditor *);
     void handleStateChanged(int state);
     void requestMark(TextEditor::ITextEditor *editor, int lineNumber);
     void showToolTip(TextEditor::ITextEditor *editor, const QPoint &pnt, int pos);
-    void querySessionValue(const QString &name, QVariant *value);
-    void setSessionValue(const QString &name, const QVariant &value);
-    void queryConfigValue(const QString &name, QVariant *value);
-    void setConfigValue(const QString &name, const QVariant &value);
     void requestContextMenu(TextEditor::ITextEditor *editor,
         int lineNumber, QMenu *menu);
 
-- 
GitLab