summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/debugger/debuggerengine.cpp2
-rw-r--r--src/plugins/debugger/debuggermainwindow.cpp3
-rw-r--r--src/plugins/debugger/enginemanager.cpp12
-rw-r--r--src/plugins/debugger/enginemanager.h1
4 files changed, 17 insertions, 1 deletions
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index eaafa9b9d3..8ced94f4ba 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -418,6 +418,8 @@ public:
m_watchHandler.cleanup();
m_engine->showMessage(tr("Debugger finished."), StatusBar);
m_engine->setState(DebuggerFinished); // Also destroys views.
+ if (boolSetting(SwitchModeOnExit))
+ EngineManager::deactivateDebugMode();
}
void scheduleResetLocation()
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index 18cfd421f0..2607c1fbd0 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -26,6 +26,7 @@
#include "debuggermainwindow.h"
#include "debuggerconstants.h"
#include "debuggerinternalconstants.h"
+#include "enginemanager.h"
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/actionmanager.h>
@@ -696,7 +697,7 @@ void Perspective::addWindow(QWidget *widget,
void Perspective::select()
{
- ModeManager::activateMode(Debugger::Constants::MODE_DEBUG);
+ Debugger::Internal::EngineManager::activateDebugMode();
if (Perspective::currentPerspective() == this)
return;
theMainWindow->d->selectPerspective(this);
diff --git a/src/plugins/debugger/enginemanager.cpp b/src/plugins/debugger/enginemanager.cpp
index 68f800c5b1..8bb62ede9d 100644
--- a/src/plugins/debugger/enginemanager.cpp
+++ b/src/plugins/debugger/enginemanager.cpp
@@ -421,6 +421,18 @@ void EngineManager::activateDebugMode()
}
}
+void EngineManager::deactivateDebugMode()
+{
+ if (ModeManager::currentModeId() == Constants::MODE_DEBUG && d->m_previousMode.isValid()) {
+ // If stopping the application also makes Qt Creator active (as the
+ // "previously active application"), doing the switch synchronously
+ // leads to funny effects with floating dock widgets
+ const Core::Id mode = d->m_previousMode;
+ QTimer::singleShot(0, d, [mode]() { ModeManager::activateMode(mode); });
+ d->m_previousMode = Id();
+ }
+}
+
bool EngineManager::isLastOf(const QString &type)
{
int count = 0;
diff --git a/src/plugins/debugger/enginemanager.h b/src/plugins/debugger/enginemanager.h
index a41f13183a..a1ee76c60b 100644
--- a/src/plugins/debugger/enginemanager.h
+++ b/src/plugins/debugger/enginemanager.h
@@ -49,6 +49,7 @@ public:
static void unregisterEngine(DebuggerEngine *engine);
static void activateEngine(DebuggerEngine *engine);
static void activateDebugMode();
+ static void deactivateDebugMode();
static bool isLastOf(const QString &type);
static QList<QPointer<DebuggerEngine> > engines();