From bac2d18405dfc37573df01a5e77798c8bd7da2b1 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 8 Aug 2016 18:35:32 +0200 Subject: [PATCH 1/4] ProjectExplorer: Resolve any CurrentProject: in default build path If ProjectMacroExpander doesn't resolve it we fall back to the generic ProjectExplorer resolution, which is likely to pick the wrong project. Task-number: QTCREATORBUG-16724 Change-Id: I201b722c5fe184905f744a1f344ec46941f92ae3 Reviewed-by: Tobias Hunger --- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp | 2 +- src/plugins/nim/project/nimbuildconfigurationfactory.cpp | 2 +- src/plugins/projectexplorer/projectmacroexpander.cpp | 6 +++++- src/plugins/projectexplorer/projectmacroexpander.h | 4 ++-- src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp | 2 +- src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp | 2 +- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index a013083c572..bbc006607fb 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -193,7 +193,7 @@ FileName CMakeBuildConfiguration::shadowBuildDirectory(const FileName &projectFi return FileName(); const QString projectName = projectFilePath.parentDir().fileName(); - ProjectMacroExpander expander(projectName, k, bcName, buildType); + ProjectMacroExpander expander(projectFilePath.toString(), projectName, k, bcName, buildType); QDir projectDir = QDir(Project::projectDirectory(projectFilePath).toString()); QString buildPath = expander.expand(Core::DocumentManager::buildDirectory()); return FileName::fromUserInput(projectDir.absoluteFilePath(buildPath)); diff --git a/src/plugins/nim/project/nimbuildconfigurationfactory.cpp b/src/plugins/nim/project/nimbuildconfigurationfactory.cpp index bd75e16c7c4..44485c664ae 100644 --- a/src/plugins/nim/project/nimbuildconfigurationfactory.cpp +++ b/src/plugins/nim/project/nimbuildconfigurationfactory.cpp @@ -180,7 +180,7 @@ FileName NimBuildConfigurationFactory::defaultBuildDirectory(const Kit *k, { QFileInfo projectFileInfo(projectFilePath); - ProjectMacroExpander expander(projectFileInfo.baseName(), k, bc, buildType); + ProjectMacroExpander expander(projectFilePath, projectFileInfo.baseName(), k, bc, buildType); QString buildDirectory = expander.expand(Core::DocumentManager::buildDirectory()); if (FileUtils::isAbsolutePath(buildDirectory)) diff --git a/src/plugins/projectexplorer/projectmacroexpander.cpp b/src/plugins/projectexplorer/projectmacroexpander.cpp index 9bffc43b9bd..83aaf2d5fbf 100644 --- a/src/plugins/projectexplorer/projectmacroexpander.cpp +++ b/src/plugins/projectexplorer/projectmacroexpander.cpp @@ -29,10 +29,14 @@ namespace ProjectExplorer { -ProjectMacroExpander::ProjectMacroExpander(const QString &projectName, +ProjectMacroExpander::ProjectMacroExpander(const QString &mainFilePath, const QString &projectName, const Kit *kit, const QString &bcName, BuildConfiguration::BuildType buildType) { + registerFileVariables(Constants::VAR_CURRENTPROJECT_PREFIX, + QCoreApplication::translate("ProjectExplorer", "Main file of current project"), + [mainFilePath]() -> QString { return mainFilePath; }); + registerVariable(Constants::VAR_CURRENTPROJECT_NAME, QCoreApplication::translate("ProjectExplorer", "Name of current project"), [projectName] { return projectName; }); diff --git a/src/plugins/projectexplorer/projectmacroexpander.h b/src/plugins/projectexplorer/projectmacroexpander.h index e36d0bf98d2..351081c97ed 100644 --- a/src/plugins/projectexplorer/projectmacroexpander.h +++ b/src/plugins/projectexplorer/projectmacroexpander.h @@ -37,8 +37,8 @@ class Kit; class PROJECTEXPLORER_EXPORT ProjectMacroExpander : public Utils::MacroExpander { public: - ProjectMacroExpander(const QString &projectName, const Kit *kit, const QString &bcName, - BuildConfiguration::BuildType buildType); + ProjectMacroExpander(const QString &mainFilePath, const QString &projectName, const Kit *kit, + const QString &bcName, BuildConfiguration::BuildType buildType); }; } // namespace ProjectExplorer diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 2ce88634ba6..2136b2fe0df 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -398,7 +398,7 @@ static Utils::FileName defaultBuildDirectory(const QString &projectFilePath, con BuildConfiguration::BuildType buildType) { const QString projectName = QFileInfo(projectFilePath).completeBaseName(); - ProjectMacroExpander expander(projectName, k, bcName, buildType); + ProjectMacroExpander expander(projectFilePath, projectName, k, bcName, buildType); QString projectDir = Project::projectDirectory(Utils::FileName::fromString(projectFilePath)).toString(); QString buildPath = expander.expand(Core::DocumentManager::buildDirectory()); return Utils::FileName::fromString(Utils::FileUtils::resolvePath(projectDir, buildPath)); diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 426d5cac313..99b673003da 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -78,7 +78,7 @@ QString QmakeBuildConfiguration::shadowBuildDirectory(const QString &proFilePath return QString(); const QString projectName = QFileInfo(proFilePath).completeBaseName(); - ProjectMacroExpander expander(projectName, k, suffix, buildType); + ProjectMacroExpander expander(proFilePath, projectName, k, suffix, buildType); QString projectDir = Project::projectDirectory(FileName::fromString(proFilePath)).toString(); QString buildPath = expander.expand(Core::DocumentManager::buildDirectory()); return FileUtils::resolvePath(projectDir, buildPath); From 9c333feb19f97511ef1e12b2acbd6ea0d9b90094 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 17 Aug 2016 11:26:21 +0200 Subject: [PATCH 2/4] Allow focusing the bookmark view This Fixes an issue when trying to open bookmarks in an external windows. Task-number: QTCREATORBUG-16524 Change-Id: I216f1d4f308a05abcbb4e074368dde30f0e05064 Reviewed-by: Eike Ziller --- src/plugins/bookmarks/bookmarkmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp index 3fc051c5399..3e80c87b679 100644 --- a/src/plugins/bookmarks/bookmarkmanager.cpp +++ b/src/plugins/bookmarks/bookmarkmanager.cpp @@ -223,7 +223,7 @@ BookmarkView::BookmarkView(BookmarkManager *manager) : setItemDelegate(new BookmarkDelegate(this)); setFrameStyle(QFrame::NoFrame); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setFocusPolicy(Qt::NoFocus); + setAttribute(Qt::WA_MacShowFocusRect, false); setSelectionModel(manager->selectionModel()); setSelectionMode(QAbstractItemView::SingleSelection); setSelectionBehavior(QAbstractItemView::SelectRows); From 906e81c745bf2f70306a27a22034f71ab5a31cba Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 17 Aug 2016 13:44:22 +0200 Subject: [PATCH 3/4] CMake: Delete watched files when closing a project Fixes a crash when re-opening a cmake project. Change-Id: I5fc747f19787594964fe55c19e29e944c4a5092d Reviewed-by: Benjamin Zeller Reviewed-by: Eike Ziller --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index bb09ec627a5..0a90def928e 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -105,6 +105,7 @@ CMakeProject::~CMakeProject() { setRootProjectNode(nullptr); m_codeModelFuture.cancel(); + qDeleteAll(m_watchedFiles); qDeleteAll(m_extraCompilers); } From a7cbae1e4ddb9744d4448b5478827630356717d8 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 16 Aug 2016 17:31:26 +0200 Subject: [PATCH 4/4] CMake: Make sure top level CMakeLists.txt file is listed exactly once The toplevel CMakeLists.txt file should always be visible in the project tree, otherwise there is no way to fix problems that stop creator from reading the project structure. Since the cmake configuration may add that file itself, creator needs to check before adding that file. All other files are taken straight from cmake, which makes sure they are unique. See the minimal project attached to QTCREATORBUG-16671 for an example triggering this issue. Change-Id: Iff3e307134b023e6955f47657e998a5981b03da0 Reviewed-by: Eike Ziller --- src/plugins/cmakeprojectmanager/builddirmanager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 1064d308243..28cbac588c8 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -382,7 +382,10 @@ void BuildDirManager::extractData() m_files.append(cbpparser.cmakeFileList()); foreach (const ProjectExplorer::FileNode *node, cbpparser.cmakeFileList()) m_cmakeFiles.insert(node->filePath()); - } else { + } + + // Make sure the top cmakelists.txt file is always listed: + if (!Utils::contains(m_files, [topCMake](ProjectExplorer::FileNode *fn) { return fn->filePath() == topCMake; })) { m_files.append(new ProjectExplorer::FileNode(topCMake, ProjectExplorer::ProjectFileType, false)); }