diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp index 341ef746523..6022602f517 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp @@ -258,7 +258,7 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString connect(EditorManager::instance(), &EditorManager::currentEditorChanged, this, &QmakeProjectManagerPlugin::updateBuildFileAction); - updateRunQMakeAction(); + updateActions(); return true; } @@ -277,9 +277,12 @@ void QmakeProjectManagerPlugin::projectChanged() else m_previousStartupProject = qobject_cast(SessionManager::startupProject()); - if (m_previousStartupProject) + if (m_previousStartupProject) { connect(m_previousStartupProject, &Project::activeTargetChanged, this, &QmakeProjectManagerPlugin::activeTargetChanged); + connect(m_previousStartupProject, &QmakeProject::parsingFinished, + this, &QmakeProjectManagerPlugin::updateActions); + } activeTargetChanged(); } @@ -299,6 +302,12 @@ void QmakeProjectManagerPlugin::activeTargetChanged() updateRunQMakeAction(); } +void QmakeProjectManagerPlugin::updateActions() +{ + updateRunQMakeAction(); + updateContextActions(); +} + void QmakeProjectManagerPlugin::updateRunQMakeAction() { bool enable = true; @@ -307,6 +316,7 @@ void QmakeProjectManagerPlugin::updateRunQMakeAction() auto pro = qobject_cast(m_previousStartupProject); m_runQMakeAction->setVisible(pro); if (!pro + || !pro->rootProjectNode() || !pro->activeTarget() || !pro->activeTarget()->activeBuildConfiguration()) enable = false; @@ -334,7 +344,11 @@ void QmakeProjectManagerPlugin::updateContextActions() FileNode *fileNode = node ? node->asFileNode() : nullptr; bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source); - bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode()); + bool subProjectActionsVisible = false; + if (qmakeProject && subProjectNode) { + if (QmakeProFileNode *rootNode = qmakeProject->rootProjectNode()) + subProjectActionsVisible = subProjectNode != rootNode; + } QString subProjectName; if (subProjectActionsVisible) diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h index 73e60b4bac8..b6d94a9aeac 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h @@ -65,6 +65,7 @@ private slots: private: void projectChanged(); void activeTargetChanged(); + void updateActions(); void updateRunQMakeAction(); void updateContextActions(); void buildStateChanged(ProjectExplorer::Project *pro); diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 25c9a34cbcc..99dab8044d2 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -256,6 +256,7 @@ bool QMakeStep::init(QList &earlierSteps) QmakeProFileNode *node = static_cast(qmakeBc->target()->project())->rootProjectNode(); if (qmakeBc->subNodeBuild()) node = qmakeBc->subNodeBuild(); + QTC_ASSERT(node, return false); QString proFile = node->filePath().toString(); QList tasks = qtVersion->reportIssues(proFile, workingDirectory);