From 577fe8a49fdbe10f506cf5885d4647f959c3b31a Mon Sep 17 00:00:00 2001
From: Ryan May <ryan.may@eecradar.com>
Date: Sun, 30 Dec 2012 22:35:25 -0600
Subject: [PATCH] Debugger: Make tabs in separate view closable.

Refactor the separate view from directly using a QTabWidget to a subclass
so that the necessary signal can be hooked up.

Change-Id: Ibc2653d554882a36a85162708021422843057bc1
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/plugins/debugger/watchhandler.cpp | 28 ++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 5f54e404190..f4056390208 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -145,6 +145,26 @@ private:
 //
 ///////////////////////////////////////////////////////////////////////
 
+class SeparateViewWidget : public QTabWidget
+{
+    Q_OBJECT
+
+public:
+    SeparateViewWidget(QWidget *parent) : QTabWidget(parent)
+    {
+        setTabsClosable(true);
+        connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeTab(int)));
+        setWindowFlags(windowFlags() | Qt::Window);
+        setWindowTitle(WatchHandler::tr("Debugger - Qt Creator"));
+    }
+
+public slots:
+    void closeTab(int index)
+    {
+        removeTab(index);
+    }
+};
+
 class WatchModel : public QAbstractItemModel
 {
     Q_OBJECT
@@ -1633,11 +1653,9 @@ void WatchHandler::removeSeparateWidget(QObject *o)
 
 void WatchHandler::showSeparateWidget(QWidget *w)
 {
-    if (m_separateWindow.isNull()) {
-        m_separateWindow = new QTabWidget(debuggerCore()->mainWindow());
-        m_separateWindow->setWindowFlags(m_separateWindow->windowFlags() | Qt::Window);
-        m_separateWindow->setWindowTitle(WatchHandler::tr("Debugger - Qt Creator"));
-    }
+    if (m_separateWindow.isNull())
+        m_separateWindow = new SeparateViewWidget(debuggerCore()->mainWindow());
+
     int index = indexOf(m_separateWindow, w);
     if (index != -1) {
         m_separateWindow->setTabText(index, w->windowTitle());
-- 
GitLab