summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Teske <daniel.teske@theqtcompany.com>2015-07-29 16:22:11 +0200
committerDaniel Teske <daniel.teske@theqtcompany.com>2015-07-29 14:39:54 +0000
commit0aee8158c21985435189a96cc14bab74f11ed948 (patch)
tree9b708a6f1a83de2e7ce8121717b26bc36db3ecff
parentfb64ca4e87a921fff2309a5522feea480573866e (diff)
downloadqt-creator-0aee8158c21985435189a96cc14bab74f11ed948.tar.gz
Fix crash on closing Creator
Removing a target setup widget might lead to removing a kit, due to some kits being temporary for importers. A kit removal then would lead to a target removal and this would make the code recurse into the widget cache. Fix that by ensuring that we disconnect from the project first in ProjectWindow::deregisterProject. And also remove the clearing of the project window, instead simply clear the widget cache as each project is closed. Change-Id: I278c43ef4ba77217428c5c36f0a07d0d96cb3022 Task-number: QTCREATORBUG-14694 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 9bd96946f7..dfa43f239e 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -96,11 +96,7 @@ ProjectWindow::~ProjectWindow()
void ProjectWindow::aboutToShutdown()
{
- showProperties(-1, -1); // that's a bit stupid, but otherwise stuff is still
- // connected to the session
- m_cache.clear();
- disconnect(KitManager::instance(), 0, this, 0);
- disconnect(SessionManager::instance(), 0, this, 0);
+ showProperties(-1, -1);
}
void ProjectWindow::removedTarget(Target *)
@@ -179,13 +175,14 @@ bool ProjectWindow::deregisterProject(Project *project)
if (index == -1)
return false;
+ disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)),
+ this, SLOT(removedTarget(ProjectExplorer::Target*)));
+
QVector<QWidget *> deletedWidgets = m_cache.deregisterProject(project);
if (deletedWidgets.contains(m_currentWidget))
m_currentWidget = 0;
m_tabWidget->removeTab(index);
- disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)),
- this, SLOT(removedTarget(ProjectExplorer::Target*)));
return true;
}
@@ -383,8 +380,3 @@ int WidgetCache::recheckFactories(Project *project, int oldSupportsIndex)
return newIndex;
}
-void WidgetCache::clear()
-{
- while (!m_projects.isEmpty())
- deregisterProject(m_projects.first().project);
-}