From 06615843df1541e67686f6a016f0c81e154c1869 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 23 Sep 2014 13:05:00 +0200 Subject: [PATCH] Qbs: Do not crash when using simplified project view Root cause is trying to set the display name on a FolderNode that is not in the tree yet. Allow setting the displayname in the constructor and use that new constructor where it makes sense. Task-number: QTCREATORBUG-12897 Change-Id: I907e48cac837966e38524bfe88a87ef17d93f0b2 Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/projectnodes.cpp | 6 ++++-- src/plugins/projectexplorer/projectnodes.h | 3 ++- src/plugins/qbsprojectmanager/qbsnodes.cpp | 9 +++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index c0a8a8e14ec..b3bc123a4a9 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -247,10 +247,12 @@ bool FileNode::isGenerated() const \sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode */ -FolderNode::FolderNode(const QString &folderPath, NodeType nodeType) : +FolderNode::FolderNode(const QString &folderPath, NodeType nodeType, const QString &displayName) : Node(nodeType, folderPath), - m_displayName(QDir::toNativeSeparators(folderPath)) + m_displayName(displayName) { + if (m_displayName.isEmpty()) + m_displayName = QDir::toNativeSeparators(folderPath); } FolderNode::~FolderNode() diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 8212e7134aa..233f93069bb 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -162,7 +162,8 @@ private: class PROJECTEXPLORER_EXPORT FolderNode : public Node { Q_OBJECT public: - explicit FolderNode(const QString &folderPath, NodeType nodeType = FolderNodeType); + explicit FolderNode(const QString &folderPath, NodeType nodeType = FolderNodeType, + const QString &displayName = QString()); virtual ~FolderNode(); QString displayName() const; diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index ee63fbdff0e..48af5cd7ce0 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -527,14 +527,15 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, break; } if (!fn) { - fn = new FolderNode(c->path()); + fn = new FolderNode(c->path(), ProjectExplorer::FolderNodeType, + displayNameFromPath(c->path(), baseDir)); root->addFolderNodes(QList() << fn); } else { foldersToRemove.removeOne(fn); if (updateExisting) fn->emitNodeUpdated(); + fn->setDisplayName(displayNameFromPath(c->path(), baseDir)); } - fn->setDisplayName(displayNameFromPath(c->path(), baseDir)); setupFolder(fn, c, c->path(), updateExisting); } @@ -811,9 +812,9 @@ QbsProjectNode *QbsProjectNode::findProjectNode(const QString &name) QbsRootProjectNode::QbsRootProjectNode(QbsProject *project) : QbsProjectNode(project->projectFilePath().toString()), m_project(project), - m_buildSystemFiles(new ProjectExplorer::FolderNode(project->projectDirectory().toString())) + m_buildSystemFiles(new ProjectExplorer::FolderNode(project->projectDirectory().toString(), + ProjectExplorer::FolderNodeType, tr("Qbs files"))) { - m_buildSystemFiles->setDisplayName(tr("Qbs files")); addFolderNodes(QList() << m_buildSystemFiles); }