From 357d01817be10c97b6f0656e3fbb29e0a8847a29 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Mon, 23 Feb 2015 12:45:53 +0100 Subject: [PATCH] QmakeProjectManager: Rework run qmake action Relied on some broken magic. Change-Id: I1641f4b135e825ef60d57e99741def018ab9b55a Task-number: QTCREATORBUG-13700 Reviewed-by: Robert Loehning Reviewed-by: Daniel Teske --- .../qmakeprojectmanagerplugin.cpp | 25 +++++++++++-------- .../qmakeprojectmanagerplugin.h | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp index 8a495d4accb..c91a99b7aff 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp @@ -196,8 +196,8 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString connect(m_buildSubProjectAction, SIGNAL(triggered()), m_qmakeProjectManager, SLOT(buildSubDirContextMenu())); m_runQMakeAction = new QAction(tr("Run qmake"), this); - command = Core::ActionManager::registerAction(m_runQMakeAction, Constants::RUNQMAKE, projectContext); - command->setAttribute(Core::Command::CA_Hide); + const Core::Context globalcontext(Core::Constants::C_GLOBAL); + command = Core::ActionManager::registerAction(m_runQMakeAction, Constants::RUNQMAKE, globalcontext); mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD); connect(m_runQMakeAction, SIGNAL(triggered()), m_qmakeProjectManager, SLOT(runQMake())); @@ -231,8 +231,11 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString connect(BuildManager::instance(), SIGNAL(buildStateChanged(ProjectExplorer::Project*)), this, SLOT(buildStateChanged(ProjectExplorer::Project*))); - connect(SessionManager::instance(), SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), - this, SLOT(startupProjectChanged())); + connect(SessionManager::instance(), &SessionManager::startupProjectChanged, + this, &QmakeProjectManagerPlugin::projectChanged); + connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged, + this, &QmakeProjectManagerPlugin::projectChanged); + connect(ProjectTree::instance(), &ProjectTree::currentNodeChanged, this, &QmakeProjectManagerPlugin::updateContextActions); @@ -272,13 +275,16 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString void QmakeProjectManagerPlugin::extensionsInitialized() { } -void QmakeProjectManagerPlugin::startupProjectChanged() +void QmakeProjectManagerPlugin::projectChanged() { if (m_previousStartupProject) disconnect(m_previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), this, SLOT(activeTargetChanged())); - m_previousStartupProject = qobject_cast(SessionManager::startupProject()); + if (ProjectTree::currentProject()) + m_previousStartupProject = qobject_cast(ProjectTree::currentProject()); + else + m_previousStartupProject = qobject_cast(SessionManager::startupProject()); if (m_previousStartupProject) connect(m_previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), @@ -305,11 +311,10 @@ void QmakeProjectManagerPlugin::activeTargetChanged() void QmakeProjectManagerPlugin::updateRunQMakeAction() { bool enable = true; - if (BuildManager::isBuilding(ProjectTree::currentProject())) + if (BuildManager::isBuilding(m_previousStartupProject)) enable = false; - QmakeProject *pro = qobject_cast(ProjectTree::currentProject()); - if (!pro) - pro = qobject_cast(SessionManager::startupProject()); + QmakeProject *pro = qobject_cast(m_previousStartupProject); + m_runQMakeAction->setVisible(pro); if (!pro || !pro->activeTarget() || !pro->activeTarget()->activeBuildConfiguration()) diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h index 3c018989f56..a052e462855 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.h @@ -65,7 +65,7 @@ public: void extensionsInitialized(); private slots: - void startupProjectChanged(); + void projectChanged(); void activeTargetChanged(); void updateRunQMakeAction(); void updateContextActions(ProjectExplorer::Node *node, ProjectExplorer::Project *project);