aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-04-20 11:31:58 +0200
committerEike Ziller <eike.ziller@qt.io>2018-04-20 11:46:05 +0000
commitcef50e4166a72f0b9f5a87327a9285e6b4280e49 (patch)
tree26264b3266efcf819e8e1d2a114c609da6eb91be
parentdb9922a5bf661bf69d740d8711851244cb5dfee5 (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.cpp22
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)