From 3057c6ecf7b40a7d2d6c4ec0cb07ee6cbcdc7ed7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Fri, 16 Apr 2010 16:45:50 +0200
Subject: [PATCH] Offer to force quit an application when closing its output
 window

Reviewed-by: dt
Task-number: QTCREATORBUG-1093
---
 src/plugins/projectexplorer/outputwindow.cpp   | 16 +++++++++++++---
 src/plugins/projectexplorer/runconfiguration.h |  2 +-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index 809823cd07b..2a048971791 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -257,9 +257,19 @@ void OutputPane::closeTab(int index)
     RunControl *rc = m_outputWindows.key(ow);
 
     if (rc->isRunning()) {
-        QString msg = tr("The application is still running. Close it first.");
-        QMessageBox::critical(0, tr("Unable to close"), msg);
-        return;
+        QMessageBox messageBox(QMessageBox::Warning,
+                               tr("Unable to close"),
+                               tr("The application is still running."),
+                               QMessageBox::Cancel | QMessageBox::Yes,
+                               ow->window());
+        messageBox.setInformativeText(tr("Force it to quit?"));
+        messageBox.setDefaultButton(QMessageBox::Yes);
+        messageBox.button(QMessageBox::Yes)->setText(tr("Force Quit"));
+
+        if (messageBox.exec() != QMessageBox::Yes)
+            return;
+
+        rc->stop();
     }
 
     m_tabWidget->removeTab(index);
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index cb38d2a32e9..ea563e4229d 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -162,7 +162,7 @@ public:
     explicit RunControl(RunConfiguration *runConfiguration);
     virtual ~RunControl();
     virtual void start() = 0;
-    virtual void stop() = 0;
+    virtual void stop() = 0; // Warning: assumed to be synchroneous!
     virtual bool isRunning() const = 0;
     virtual QString displayName() const;
 
-- 
GitLab