From 3aef80df5747df29e17ef7ebb4529e7c5d80f3be Mon Sep 17 00:00:00 2001
From: dt <qtc-commiter@nokia.com>
Date: Fri, 16 Jan 2009 12:22:43 +0100
Subject: [PATCH] Fixes:    Run from the context menu runs the startupProject

Task:     Reported on mailing list.
---
 .../projectexplorer/projectexplorer.cpp       | 21 +++++++++++++++++--
 src/plugins/projectexplorer/projectexplorer.h |  3 +++
 .../projectexplorerconstants.h                |  1 +
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index c6cb624fb86..5e41913db02 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -521,6 +521,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     cmd = am->registerAction(m_runAction, Constants::RUN, globalcontext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+R")));
     mbuild->addAction(cmd, Constants::G_BUILD_RUN);
+
+    m_runActionContextMenu = new QAction(runIcon, tr("Run"), this);
+    cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext);
     mproject->addAction(cmd, Constants::G_PROJECT_RUN);
 
     Core::ActionContainer *mrc = am->createMenu(Constants::RUNCONFIGURATIONMENU);
@@ -616,6 +619,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
     connect(m_cleanAction, SIGNAL(triggered()), this, SLOT(cleanProject()));
     connect(m_cleanSessionAction, SIGNAL(triggered()), this, SLOT(cleanSession()));
     connect(m_runAction, SIGNAL(triggered()), this, SLOT(runProject()));
+    connect(m_runActionContextMenu, SIGNAL(triggered()), this, SLOT(runProjectContextMenu()));
     connect(m_cancelBuildAction, SIGNAL(triggered()), this, SLOT(cancelBuild()));
     connect(m_debugAction, SIGNAL(triggered()), this, SLOT(debugProject()));
     connect(m_dependenciesAction, SIGNAL(triggered()), this, SLOT(editDependencies()));
@@ -1348,7 +1352,16 @@ void ProjectExplorerPlugin::cleanSession()
 
 void ProjectExplorerPlugin::runProject()
 {
-    Project *pro = startupProject();
+    runProjectImpl(startupProject());
+}
+
+void ProjectExplorerPlugin::runProjectContextMenu()
+{
+    runProjectImpl(m_currentProject);
+}
+
+void ProjectExplorerPlugin::runProjectImpl(Project *pro)
+{
     if (!pro)
         return;
 
@@ -1434,10 +1447,14 @@ IRunConfigurationRunner *ProjectExplorerPlugin::findRunner(QSharedPointer<RunCon
 void ProjectExplorerPlugin::updateRunAction()
 {
     const Project *project = startupProject();
-    const bool canRun = project && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
+    bool canRun = project && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
     const bool canDebug = project && !m_debuggingRunControl && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE);
     const bool building = m_buildManager->isBuilding();
     m_runAction->setEnabled(canRun && !building);
+
+    canRun = m_currentProject && findRunner(m_currentProject->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE);
+    m_runActionContextMenu->setEnabled(canRun && !building);
+
     m_debugAction->setEnabled(canDebug && !building);
 }
 
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 1d270226d1a..ff58e7ba8c6 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -156,6 +156,7 @@ private slots:
     void restoreSession();
     void loadSession(const QString &session);
     void runProject();
+    void runProjectContextMenu();
     void savePersistentSettings();
     void goToTaskWindow();
 
@@ -188,6 +189,7 @@ private slots:
     void currentModeChanged(Core::IMode *mode);
 
 private:
+    void runProjectImpl(Project *pro);
     void setCurrent(Project *project, QString filePath, Node *node);
 
     QStringList allFilesWithDependencies(Project *pro);
@@ -223,6 +225,7 @@ private:
     QAction *m_cleanAction;
     QAction *m_cleanSessionAction;
     QAction *m_runAction;
+    QAction *m_runActionContextMenu;
     QAction *m_cancelBuildAction;
     QAction *m_debugAction;
     QAction *m_dependenciesAction;
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index ef745e69c90..e65ca54d099 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -57,6 +57,7 @@ const char * const BUILDCONFIGURATIONMENU = "ProjectExplorer.BuildConfigurationM
 const char * const CANCELBUILD          = "ProjectExplorer.CancelBuild";
 const char * const RUNCONFIGURATIONMENU = "ProjectExplorer.RunConfigurationMenu";
 const char * const RUN                  = "ProjectExplorer.Run";
+const char * const RUNCONTEXTMENU       = "ProjectExplorer.RunContextMenu";
 const char * const STOP                 = "ProjectExplorer.Stop";
 const char * const DEBUG                = "ProjectExplorer.Debug";
 const char * const DEPENDENCIES         = "ProjectExplorer.Dependencies";
-- 
GitLab