diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 0359bbd72bc..8a08688fd40 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -547,6 +547,7 @@ public: int stopWatchdogInterval = 0; // 5000; int stopWatchdogTimerId = -1; bool supportsReRunning = true; + bool essential = false; }; enum class RunControlState @@ -954,6 +955,10 @@ void RunControlPrivate::onWorkerStopped(RunWorker *worker) if (state == RunControlState::Finishing || state == RunControlState::Stopping) { continueStopOrFinish(); return; + } else if (worker->isEssential()) { + debugMessage(workerId + " is essential. Stopping all others."); + initiateStop(); + return; } for (RunWorker *dependent : worker->d->stopDependencies) { @@ -1701,6 +1706,16 @@ QString RunWorker::userMessageForProcessError(QProcess::ProcessError error, cons return msg; } +bool RunWorker::isEssential() const +{ + return d->essential; +} + +void RunWorker::setEssential(bool essential) +{ + d->essential = essential; +} + void RunWorker::start() { reportStarted(); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 0eda5b396a4..80c1631d63e 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -353,6 +353,9 @@ public: static QString userMessageForProcessError(QProcess::ProcessError, const QString &programName); + bool isEssential() const; + void setEssential(bool essential); + signals: void started(); void stopped();