forked from qt-creator/qt-creator
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:
@@ -384,20 +384,23 @@ void SessionManager::addProject(Project *pro)
|
|||||||
|
|
||||||
emit m_instance->projectAdded(pro);
|
emit m_instance->projectAdded(pro);
|
||||||
const auto updateFolderNavigation = [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();
|
const QIcon icon = pro->rootProjectNode() ? pro->rootProjectNode()->icon() : QIcon();
|
||||||
FolderNavigationWidgetFactory::insertRootDirectory({projectFolderId(pro),
|
FolderNavigationWidgetFactory::insertRootDirectory({projectFolderId(pro),
|
||||||
PROJECT_SORT_VALUE,
|
PROJECT_SORT_VALUE,
|
||||||
pro->displayName(),
|
pro->displayName(),
|
||||||
pro->projectFilePath().parentDir(),
|
pro->projectFilePath().parentDir(),
|
||||||
icon});
|
icon});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
updateFolderNavigation();
|
updateFolderNavigation();
|
||||||
configureEditors(pro);
|
configureEditors(pro);
|
||||||
connect(pro, &Project::fileListChanged, [pro, updateFolderNavigation]() {
|
connect(pro, &Project::fileListChanged, m_instance, [pro, updateFolderNavigation]() {
|
||||||
configureEditors(pro);
|
configureEditors(pro);
|
||||||
updateFolderNavigation(); // update icon
|
updateFolderNavigation(); // update icon
|
||||||
});
|
});
|
||||||
connect(pro, &Project::displayNameChanged, pro, updateFolderNavigation);
|
connect(pro, &Project::displayNameChanged, m_instance, updateFolderNavigation);
|
||||||
|
|
||||||
if (!startupProject())
|
if (!startupProject())
|
||||||
setStartupProject(pro);
|
setStartupProject(pro);
|
||||||
@@ -696,8 +699,9 @@ void SessionManager::removeProjects(const QList<Project *> &remove)
|
|||||||
if (pro == d->m_startupProject)
|
if (pro == d->m_startupProject)
|
||||||
changeStartupProject = true;
|
changeStartupProject = true;
|
||||||
|
|
||||||
emit m_instance->projectRemoved(pro);
|
|
||||||
FolderNavigationWidgetFactory::removeRootDirectory(projectFolderId(pro));
|
FolderNavigationWidgetFactory::removeRootDirectory(projectFolderId(pro));
|
||||||
|
disconnect(pro, nullptr, m_instance, nullptr);
|
||||||
|
emit m_instance->projectRemoved(pro);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changeStartupProject)
|
if (changeStartupProject)
|
||||||
|
Reference in New Issue
Block a user