diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index c8acfb71b51..ea7df0746d2 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -536,3 +536,12 @@ bool AppOutputPane::canNavigate() { return false; } + +QList AppOutputPane::runControls() const +{ + QList result; + foreach (const RunControlTab& tab, m_runControlTabs) + result << tab.runControl; + return result; +} + diff --git a/src/plugins/projectexplorer/appoutputpane.h b/src/plugins/projectexplorer/appoutputpane.h index 7336f23ea6b..b8de22fc1ee 100644 --- a/src/plugins/projectexplorer/appoutputpane.h +++ b/src/plugins/projectexplorer/appoutputpane.h @@ -84,6 +84,8 @@ public: bool aboutToClose() const; bool closeTabs(CloseTabMode mode); + QList runControls() const; + signals: void allRunControlsFinished(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 6c76d3ea192..9a9f433571a 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1504,6 +1504,11 @@ void ProjectExplorerPlugin::startRunControl(RunControl *runControl, const QStrin emit updateRunActions(); } +QList ProjectExplorerPlugin::runControls() const +{ + return d->m_outputPane->runControls(); +} + void ProjectExplorerPlugin::buildQueueFinished(bool success) { if (debug) diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index de6f1798177..127b173d45e 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -130,6 +130,8 @@ public: void buildProject(ProjectExplorer::Project *p); + QList runControls() const; + signals: void aboutToShowContextMenu(ProjectExplorer::Project *project, ProjectExplorer::Node *node); diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp index 205b748128f..78dde994f88 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -67,6 +68,7 @@ QmlProjectRunControl::QmlProjectRunControl(QmlProjectRunConfiguration *runConfig m_executable = runConfiguration->observerPath(); } m_commandLineArguments = runConfiguration->viewerArguments(); + m_mainQmlFile = runConfiguration->mainScript(); connect(&m_applicationLauncher, SIGNAL(appendMessage(QString,Utils::OutputFormat)), this, SLOT(slotAppendMessage(QString, Utils::OutputFormat))); @@ -126,6 +128,11 @@ void QmlProjectRunControl::processExited(int exitCode) emit finished(); } +QString QmlProjectRunControl::mainQmlFile() const +{ + return m_mainQmlFile; +} + QmlProjectRunControlFactory::QmlProjectRunControlFactory(QObject *parent) : IRunControlFactory(parent) { @@ -163,8 +170,19 @@ RunControl *QmlProjectRunControlFactory::create(RunConfiguration *runConfigurati const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); - QmlProjectRunConfiguration *config = qobject_cast(runConfiguration); + + QList runcontrols = + ProjectExplorer::ProjectExplorerPlugin::instance()->runControls(); + foreach (ProjectExplorer::RunControl *rc, runcontrols) { + if (QmlProjectRunControl *qrc = qobject_cast(rc)) { + if (qrc->mainQmlFile() == config->mainScript()) + // Asking the user defeats the purpose + // Making it configureable might be worth it + qrc->stop(); + } + } + RunControl *runControl = 0; if (mode == ProjectExplorer::Constants::RUNMODE) runControl = new QmlProjectRunControl(config, mode); diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h index 02a22c97289..62f5b82249c 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.h @@ -55,6 +55,8 @@ public: virtual bool isRunning() const; virtual QIcon icon() const; + QString mainQmlFile() const; + private slots: void processExited(int exitCode); void slotBringApplicationToForeground(qint64 pid); @@ -65,6 +67,7 @@ private: QString m_executable; QString m_commandLineArguments; + QString m_mainQmlFile; }; class QmlProjectRunControlFactory : public ProjectExplorer::IRunControlFactory {