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>
This commit is contained in:
Eike Ziller
2018-04-20 11:31:58 +02:00
parent db9922a5bf
commit cef50e4166

View File

@@ -384,20 +384,23 @@ void SessionManager::addProject(Project *pro)
emit m_instance->projectAdded(pro);
const auto updateFolderNavigation = [pro] {
// 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)