From 005b0a9a689cb15441d7bb2f021b54ba42577070 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Tue, 23 Jun 2009 14:59:01 +0200
Subject: [PATCH] Fix exit crash when having context help open.

Add a shutdown()-notification to MainWindow and
reset the context in it.

Task-number: 256386
Reviewed-by: con <qtc-committer@nokia.com>
---
 src/plugins/coreplugin/coreplugin.cpp | 5 +++++
 src/plugins/coreplugin/coreplugin.h   | 5 +++--
 src/plugins/coreplugin/mainwindow.cpp | 7 +++++++
 src/plugins/coreplugin/mainwindow.h   | 1 +
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 5012493812b..7d912a4578f 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -96,4 +96,9 @@ void CorePlugin::remoteArgument(const QString& arg)
     }
 }
 
+void CorePlugin::shutdown()
+{
+    m_mainWindow->shutdown();
+}
+
 Q_EXPORT_PLUGIN(CorePlugin)
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 1d12c14ec39..4580dd6fd0e 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -47,8 +47,9 @@ public:
     CorePlugin();
     ~CorePlugin();
 
-    bool initialize(const QStringList &arguments, QString *errorMessage = 0);
-    void extensionsInitialized();
+    virtual bool initialize(const QStringList &arguments, QString *errorMessage = 0);
+    virtual void extensionsInitialized();
+    virtual void shutdown();
 
 public slots:
     void remoteArgument(const QString&);
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index aaec0076ae6..66b84c85f92 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -1081,6 +1081,13 @@ void MainWindow::resetContext()
     updateContextObject(0);
 }
 
+void MainWindow::shutdown()
+{
+    disconnect(QApplication::instance(), SIGNAL(focusChanged(QWidget*,QWidget*)),
+               this, SLOT(updateFocusWidget(QWidget*,QWidget*)));
+    m_activeContext = 0;
+}
+
 static const char *settingsGroup = "MainWindow";
 static const char *geometryKey = "Geometry";
 static const char *colorKey = "Color";
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 13e980d4824..c0aa8494a70 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -89,6 +89,7 @@ public:
 
     bool init(QString *errorMessage);
     void extensionsInitialized();
+    void shutdown();
 
     IContext *contextObject(QWidget *widget);
     void addContextObject(IContext *contex);
-- 
GitLab