diff --git a/src/plugins/coreplugin/progressmanager/processprogress.cpp b/src/plugins/coreplugin/progressmanager/processprogress.cpp index 4b5aa0322b9..d2109f072a4 100644 --- a/src/plugins/coreplugin/progressmanager/processprogress.cpp +++ b/src/plugins/coreplugin/progressmanager/processprogress.cpp @@ -28,7 +28,9 @@ public: ProgressParser m_parser = {}; QFutureWatcher m_watcher; QFutureInterface m_futureInterface; + QPointer m_futureProgress; QString m_displayName; + FutureProgress::KeepOnFinishType m_keep = FutureProgress::HideOnFinish; }; ProcessProgressPrivate::ProcessProgressPrivate(ProcessProgress *progress, QtcProcess *process) @@ -91,11 +93,12 @@ ProcessProgress::ProcessProgress(QtcProcess *process) const QString name = d->displayName(); const auto id = Id::fromString(name + ".action"); if (d->m_parser) { - ProgressManager::addTask(d->m_futureInterface.future(), name, id); + d->m_futureProgress = ProgressManager::addTask(d->m_futureInterface.future(), name, id); } else { - ProgressManager::addTimedTask(d->m_futureInterface, name, id, - qMax(2, d->m_process->timeoutS() / 5)); + d->m_futureProgress = ProgressManager::addTimedTask(d->m_futureInterface, name, id, + qMax(2, d->m_process->timeoutS() / 5)); } + d->m_futureProgress->setKeepOnFinish(d->m_keep); }); connect(d->m_process, &QtcProcess::done, this, [this] { if (d->m_process->result() != ProcessResult::FinishedWithSuccess) @@ -109,6 +112,13 @@ void ProcessProgress::setDisplayName(const QString &name) d->m_displayName = name; } +void ProcessProgress::setKeepOnFinish(FutureProgress::KeepOnFinishType keepType) +{ + d->m_keep = keepType; + if (d->m_futureProgress) + d->m_futureProgress->setKeepOnFinish(d->m_keep); +} + void ProcessProgress::setProgressParser(const ProgressParser &parser) { if (d->m_parser) { diff --git a/src/plugins/coreplugin/progressmanager/processprogress.h b/src/plugins/coreplugin/progressmanager/processprogress.h index 4d80a99bd80..d6e1721622a 100644 --- a/src/plugins/coreplugin/progressmanager/processprogress.h +++ b/src/plugins/coreplugin/progressmanager/processprogress.h @@ -26,6 +26,7 @@ public: ProcessProgress(Utils::QtcProcess *process); // Makes ProcessProgress a child of process void setDisplayName(const QString &name); + void setKeepOnFinish(FutureProgress::KeepOnFinishType keepType); void setProgressParser(const ProgressParser &parser); private: