From 46ecaecc13d91de686fdbadb19194742bf6c6eb7 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Thu, 17 Feb 2011 15:43:54 +0100
Subject: [PATCH] Remove dock widget handles from debugger tool bar.

Otherwise it's possible to remove the tool bar without ever getting it
back.
---
 src/libs/utils/fancymainwindow.cpp          | 26 ++++++++++++++-------
 src/plugins/debugger/debuggermainwindow.cpp |  1 +
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp
index dd17ae5f798..5c1cdeb6793 100644
--- a/src/libs/utils/fancymainwindow.cpp
+++ b/src/libs/utils/fancymainwindow.cpp
@@ -119,14 +119,16 @@ void FancyMainWindow::updateDockWidget(QDockWidget *dockWidget)
     const QDockWidget::DockWidgetFeatures features =
             (d->m_locked) ? QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable
                        : QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable;
-    QWidget *titleBarWidget = dockWidget->titleBarWidget();
-    if (d->m_locked && !titleBarWidget && !dockWidget->isFloating())
-        titleBarWidget = new QWidget(dockWidget);
-    else if ((!d->m_locked || dockWidget->isFloating()) && titleBarWidget) {
-        delete titleBarWidget;
-        titleBarWidget = 0;
+    if (dockWidget->property("managed_dockwidget").isNull()) { // for the debugger tool bar
+        QWidget *titleBarWidget = dockWidget->titleBarWidget();
+        if (d->m_locked && !titleBarWidget && !dockWidget->isFloating())
+            titleBarWidget = new QWidget(dockWidget);
+        else if ((!d->m_locked || dockWidget->isFloating()) && titleBarWidget) {
+            delete titleBarWidget;
+            titleBarWidget = 0;
+        }
+        dockWidget->setTitleBarWidget(titleBarWidget);
     }
-    dockWidget->setTitleBarWidget(titleBarWidget);
     dockWidget->setFeatures(features);
 }
 
@@ -257,7 +259,15 @@ bool FancyMainWindow::isLocked() const
 
 QMenu *FancyMainWindow::createPopupMenu()
 {
-    QMenu *menu = QMainWindow::createPopupMenu();
+    QMenu *menu = new QMenu(this);;
+    QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
+    for (int i = 0; i < dockwidgets.size(); ++i) {
+        QDockWidget *dockWidget = dockwidgets.at(i);
+        if (dockWidget->property("managed_dockwidget").isNull()
+                && dockWidget->parentWidget() == this) {
+            menu->addAction(dockwidgets.at(i)->toggleViewAction());
+        }
+    }
     menu->addAction(&d->m_menuSeparator1);
     menu->addAction(&d->m_toggleLockedAction);
     menu->addAction(&d->m_menuSeparator2);
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index 4749d08d6e0..c37a756c991 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -476,6 +476,7 @@ QWidget *DebuggerMainWindow::createContents(IMode *mode)
     dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
     dock->setAllowedAreas(Qt::BottomDockWidgetArea);
     dock->setTitleBarWidget(new QWidget(dock));
+    dock->setProperty("managed_dockwidget", QLatin1String("true"));
     addDockWidget(Qt::BottomDockWidgetArea, dock);
     setToolBarDockWidget(dock);
 
-- 
GitLab