diff options
author | Eike Ziller <eike.ziller@qt.io> | 2018-04-20 11:31:58 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2018-04-20 11:46:05 +0000 |
commit | cef50e4166a72f0b9f5a87327a9285e6b4280e49 (patch) | |
tree | 26264b3266efcf819e8e1d2a114c609da6eb91be | |
parent | db9922a5bf661bf69d740d8711851244cb5dfee5 (diff) |
Fix removal of projects from file system view
The destruction of a project can still trigger file list changes, so
just check if the project is actually still registered before updating
anything.
Task-number: QTCREATORBUG-20314
Change-Id: I0d634ca8986d1f09e84c310ae732c0bcdc675534
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rw-r--r-- | src/plugins/projectexplorer/session.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 9ce5f32a59..3f446f282e 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -384,20 +384,23 @@ void SessionManager::addProject(Project *pro) emit m_instance->projectAdded(pro); const auto updateFolderNavigation = [pro] { - const QIcon icon = pro->rootProjectNode() ? pro->rootProjectNode()->icon() : QIcon(); - FolderNavigationWidgetFactory::insertRootDirectory({projectFolderId(pro), - PROJECT_SORT_VALUE, - pro->displayName(), - pro->projectFilePath().parentDir(), - icon}); + // destructing projects might trigger changes, so check if the project is actually there + if (QTC_GUARD(d->m_projects.contains(pro))) { + const QIcon icon = pro->rootProjectNode() ? pro->rootProjectNode()->icon() : QIcon(); + FolderNavigationWidgetFactory::insertRootDirectory({projectFolderId(pro), + PROJECT_SORT_VALUE, + pro->displayName(), + pro->projectFilePath().parentDir(), + icon}); + } }; updateFolderNavigation(); configureEditors(pro); - connect(pro, &Project::fileListChanged, [pro, updateFolderNavigation]() { + connect(pro, &Project::fileListChanged, m_instance, [pro, updateFolderNavigation]() { configureEditors(pro); updateFolderNavigation(); // update icon }); - connect(pro, &Project::displayNameChanged, pro, updateFolderNavigation); + connect(pro, &Project::displayNameChanged, m_instance, updateFolderNavigation); if (!startupProject()) setStartupProject(pro); @@ -696,8 +699,9 @@ void SessionManager::removeProjects(const QList<Project *> &remove) if (pro == d->m_startupProject) changeStartupProject = true; - emit m_instance->projectRemoved(pro); FolderNavigationWidgetFactory::removeRootDirectory(projectFolderId(pro)); + disconnect(pro, nullptr, m_instance, nullptr); + emit m_instance->projectRemoved(pro); } if (changeStartupProject) |