aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/utils/appmainwindow.cpp17
-rw-r--r--src/libs/utils/appmainwindow.h7
-rw-r--r--src/plugins/debugger/commonoptionspage.cpp3
-rw-r--r--src/plugins/debugger/commonoptionspage.ui27
-rw-r--r--src/plugins/debugger/debuggeractions.cpp6
-rw-r--r--src/plugins/debugger/debuggeractions.h1
-rw-r--r--src/plugins/debugger/debuggerengine.cpp2
-rw-r--r--src/plugins/debugger/debuggerengine.h1
-rw-r--r--src/plugins/debugger/debuggermainwindow.cpp22
-rw-r--r--src/plugins/debugger/debuggermainwindow.h7
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp1
11 files changed, 78 insertions, 16 deletions
diff --git a/src/libs/utils/appmainwindow.cpp b/src/libs/utils/appmainwindow.cpp
index 5eb8f4ab194..09bb3336232 100644
--- a/src/libs/utils/appmainwindow.cpp
+++ b/src/libs/utils/appmainwindow.cpp
@@ -36,10 +36,13 @@
#include <windows.h>
#endif
-#include <QtDebug>
#include <QEvent>
#include <QCoreApplication>
+#ifdef Q_WS_X11
+#include <QX11Info>
+#endif
+
namespace Utils {
/* The notification signal is delayed by using a custom event
@@ -56,6 +59,18 @@ AppMainWindow::AppMainWindow() :
{
}
+void AppMainWindow::raiseWindow()
+{
+ setWindowState(windowState() & ~Qt::WindowMinimized);
+
+ raise();
+#ifdef Q_WS_X11
+ // work around QTBUG-24932
+ QX11Info::setAppUserTime(0);
+#endif
+ activateWindow();
+}
+
#ifdef Q_OS_WIN
bool AppMainWindow::event(QEvent *event)
{
diff --git a/src/libs/utils/appmainwindow.h b/src/libs/utils/appmainwindow.h
index 928adb678dd..d773bc85517 100644
--- a/src/libs/utils/appmainwindow.h
+++ b/src/libs/utils/appmainwindow.h
@@ -38,17 +38,14 @@
namespace Utils {
-/*!
- * This class only exists because we can't include windows.h in mainwindow.cpp
- * because windows defines an IContext...
- */
-
class QTCREATOR_UTILS_EXPORT AppMainWindow : public QMainWindow
{
Q_OBJECT
public:
AppMainWindow();
+ void raiseWindow();
+
signals:
void deviceChange();
diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp
index 4718a1cc9fc..98806c9784b 100644
--- a/src/plugins/debugger/commonoptionspage.cpp
+++ b/src/plugins/debugger/commonoptionspage.cpp
@@ -72,6 +72,8 @@ CommonOptionsPageWidget::CommonOptionsPageWidget
m_ui.checkBoxCloseBuffersOnExit);
m_group->insert(dc->action(SwitchModeOnExit),
m_ui.checkBoxSwitchModeOnExit);
+ m_group->insert(dc->action(RaiseOnInterrupt),
+ m_ui.checkBoxBringToForegroundOnInterrrupt);
m_group->insert(dc->action(FontSizeFollowsEditor),
m_ui.checkBoxFontSizeFollowsEditor);
m_group->insert(dc->action(AutoDerefPointers), 0);
@@ -120,6 +122,7 @@ QString CommonOptionsPageWidget::searchKeyWords() const
<< sep << m_ui.checkBoxCloseBuffersOnExit->text()
<< sep << m_ui.checkBoxSwitchModeOnExit->text()
<< sep << m_ui.labelMaximalStackDepth->text()
+ << sep << m_ui.checkBoxBringToForegroundOnInterrrupt->text()
;
rc.remove(QLatin1Char('&'));
return rc;
diff --git a/src/plugins/debugger/commonoptionspage.ui b/src/plugins/debugger/commonoptionspage.ui
index 8cf9ae4f0e9..b44f2f36cb4 100644
--- a/src/plugins/debugger/commonoptionspage.ui
+++ b/src/plugins/debugger/commonoptionspage.ui
@@ -65,16 +65,6 @@
</property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QCheckBox" name="checkBoxRegisterForPostMortem">
- <property name="toolTip">
- <string>Register Qt Creator for debugging crashed applications.</string>
- </property>
- <property name="text">
- <string>Use Qt Creator for post-mortem debugging</string>
- </property>
- </widget>
- </item>
<item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -130,6 +120,23 @@
</item>
</layout>
</item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="checkBoxRegisterForPostMortem">
+ <property name="toolTip">
+ <string>Register Qt Creator for debugging crashed applications.</string>
+ </property>
+ <property name="text">
+ <string>Use Qt Creator for post-mortem debugging</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QCheckBox" name="checkBoxBringToForegroundOnInterrrupt">
+ <property name="text">
+ <string>Bring Qt Creator to foreground when application interrupts</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 0712a37124f..ffb0d1842da 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -398,6 +398,12 @@ DebuggerSettings::DebuggerSettings(QSettings *settings)
insertItem(SwitchModeOnExit, item);
item = new SavedAction(this);
+ item->setSettingsKey(debugModeGroup, QLatin1String("RaiseOnInterrupt"));
+ item->setCheckable(true);
+ item->setDefaultValue(true);
+ insertItem(RaiseOnInterrupt, item);
+
+ item = new SavedAction(this);
item->setSettingsKey(debugModeGroup, QLatin1String("AutoQuit"));
item->setText(tr("Automatically Quit Debugger"));
item->setCheckable(true);
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 1bdc34c496f..9da4ab1b051 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -100,6 +100,7 @@ enum DebuggerActionCode
OperateByInstruction,
CloseBuffersOnExit,
SwitchModeOnExit,
+ RaiseOnInterrupt,
UseDebuggingHelpers,
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index f90a91bf851..a335902fb0d 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1038,6 +1038,8 @@ void DebuggerEngine::notifyInferiorSpontaneousStop()
QTC_ASSERT(state() == InferiorRunOk, qDebug() << this << state());
showStatusMessage(tr("Stopped."));
setState(InferiorStopOk);
+ if (debuggerCore()->boolSetting(RaiseOnInterrupt))
+ emit raiseWindow();
}
void DebuggerEngine::notifyInferiorStopFailed()
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index f2f133dff14..4151b2dace1 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -302,6 +302,7 @@ signals:
* a server start script should be used, but none is given.
*/
void requestRemoteSetup();
+ void raiseWindow();
protected:
// The base notify*() function implementation should be sufficient
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index d5c1102b9e0..1f434e44dce 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -32,7 +32,9 @@
#include "debuggermainwindow.h"
#include "debuggercore.h"
+#include "debuggerengine.h"
+#include <utils/appmainwindow.h>
#include <utils/styledbar.h>
#include <utils/qtcassert.h>
#include <utils/fancymainwindow.h>
@@ -141,6 +143,8 @@ public:
Project *m_previousProject;
Target *m_previousTarget;
RunConfiguration *m_previousRunConfiguration;
+
+ DebuggerEngine *m_engine;
};
DebuggerMainWindowPrivate::DebuggerMainWindowPrivate(DebuggerMainWindow *mw)
@@ -157,6 +161,7 @@ DebuggerMainWindowPrivate::DebuggerMainWindowPrivate(DebuggerMainWindow *mw)
, m_previousProject(0)
, m_previousTarget(0)
, m_previousRunConfiguration(0)
+ , m_engine(0)
{
createViewsMenuItems();
addLanguage(CppLanguage, Context(C_CPPDEBUGGER));
@@ -271,6 +276,15 @@ DebuggerMainWindow::~DebuggerMainWindow()
delete d;
}
+void DebuggerMainWindow::setCurrentEngine(DebuggerEngine *engine)
+{
+ if (d->m_engine)
+ disconnect(d->m_engine, SIGNAL(raiseWindow()), this, SLOT(raiseDebuggerWindow()));
+ d->m_engine = engine;
+ if (d->m_engine)
+ connect(d->m_engine, SIGNAL(raiseWindow()), this, SLOT(raiseDebuggerWindow()));
+}
+
DebuggerLanguages DebuggerMainWindow::activeDebugLanguages() const
{
return d->m_activeDebugLanguages;
@@ -559,6 +573,14 @@ void DebuggerMainWindow::writeSettings() const
settings->endGroup();
}
+void DebuggerMainWindow::raiseDebuggerWindow()
+{
+ Core::ICore *core = Core::ICore::instance();
+ Utils::AppMainWindow *appMainWindow = qobject_cast<Utils::AppMainWindow*>(core->mainWindow());
+ QTC_ASSERT(appMainWindow, return)
+ appMainWindow->raiseWindow();
+}
+
void DebuggerMainWindow::readSettings()
{
QSettings *settings = ICore::settings();
diff --git a/src/plugins/debugger/debuggermainwindow.h b/src/plugins/debugger/debuggermainwindow.h
index a43ee833c58..ed82cbdd727 100644
--- a/src/plugins/debugger/debuggermainwindow.h
+++ b/src/plugins/debugger/debuggermainwindow.h
@@ -45,6 +45,8 @@ class IMode;
namespace Debugger {
+class DebuggerEngine;
+
namespace Internal {
class DebuggerMainWindowPrivate;
}
@@ -57,6 +59,8 @@ public:
DebuggerMainWindow();
~DebuggerMainWindow();
+ void setCurrentEngine(DebuggerEngine *engine);
+
// Debugger toolbars are registered with this function.
void setToolBar(DebuggerLanguage language, QWidget *widget);
@@ -81,6 +85,9 @@ public:
void readSettings();
void writeSettings() const;
+private slots:
+ void raiseDebuggerWindow();
+
signals:
void activeDebugLanguagesChanged(Debugger::DebuggerLanguages);
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index fcec00c9069..19aa868c878 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2100,6 +2100,7 @@ void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine)
engine->watchHandler()->rebuildModel();
mainWindow()->setEngineDebugLanguages(engine->languages());
+ mainWindow()->setCurrentEngine(engine);
}
static void changeFontSize(QWidget *widget, qreal size)