diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 43870201dbd..7d283d39011 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -417,13 +417,6 @@ void Project::setDocument(Core::IDocument *doc) QTC_ASSERT(doc, return); QTC_ASSERT(!d->m_document, return); d->m_document = doc; - - if (!d->m_rootProjectNode) { - auto newRoot = new ProjectNode(projectDirectory()); - newRoot->setDisplayName(displayName()); - newRoot->addNode(new FileNode(projectFilePath(), FileType::Project, false)); - setRootProjectNode(newRoot); - } } void Project::setRootProjectNode(ProjectNode *root) diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 03858db5e73..dd0c5d9afb6 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -40,7 +40,7 @@ namespace Utils { class MimeType; } namespace ProjectExplorer { class RunConfiguration; -class Project; +class SessionManager; enum class NodeType : quint16 { File = 1, @@ -302,7 +302,7 @@ protected: // will add the persistent stuff explicit ProjectNode(const Utils::FileName &projectFilePath); - friend class Project; + friend class SessionManager; }; // Documentation inside. diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 6efdea90190..2e87aef4ff7 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -205,7 +205,14 @@ void SessionManager::updateProjectTree(Project *pro) return; // Project was already de-registered and is shutting down ProjectNode *const oldNode = currentPair->second; - ProjectNode *const newNode = pro->rootProjectNode(); + ProjectNode *newNode = pro->rootProjectNode(); + + if (!newNode) { + // Set up generic project structure if the project does not provide any! + newNode = new ProjectNode(pro->projectDirectory()); + newNode->setDisplayName(pro->displayName()); + newNode->addNode(new FileNode(pro->projectFilePath(), FileType::Project, false)); + } d->m_sessionNode.replaceSubtree(oldNode, newNode); currentPair->second = newNode; @@ -766,6 +773,10 @@ void SessionManager::removeProjects(QList remove) pro->saveSettings(); pro->setRootProjectNode(nullptr); // Deregister project with sessionnode! + // Remove the project node: + Node *projectNode = nodeForProject(pro); + d->m_sessionNode.removeNode(projectNode); + d->m_projects = Utils::filtered(d->m_projects, [pro](const QPair &pair) {