diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp index 36d7a4515f6..ecb1192c097 100644 --- a/src/plugins/vcsbase/vcscommand.cpp +++ b/src/plugins/vcsbase/vcscommand.cpp @@ -30,6 +30,7 @@ #include "vcsplugin.h" #include +#include #include #include @@ -105,6 +106,7 @@ public: QTextCodec *m_codec = nullptr; ProgressParser *m_progressParser = nullptr; QFutureWatcher m_watcher; + FutureProgress *m_futureProgress = nullptr; QList m_jobs; unsigned m_flags = 0; @@ -144,13 +146,7 @@ void VcsCommand::addTask(const QFuture &future) const QString name = displayName(); const auto id = Id::fromString(name + QLatin1String(".action")); - if (d->m_progressParser) { - ProgressManager::addTask(future, name, id); - } else { - ProgressManager::addTimedTask(QFutureInterface::get(future), name, id, - qMax(2, timeoutS() / 5)); - } - + d->m_futureProgress = ProgressManager::addTask(future, name, id); Internal::VcsPlugin::addFuture(future); } @@ -249,10 +245,14 @@ void VcsCommand::run(QFutureInterface &future) GlobalFileChangeBlocker::instance()->forceBlocked(true); }); } - if (d->m_progressParser) + if (d->m_progressParser) { d->m_progressParser->setFuture(&future); - else - future.setProgressRange(0, 1); + } else { + QMetaObject::invokeMethod(this, [this, future] { + (void) new ProgressTimer(future, qMax(2, timeoutS() / 5), d->m_futureProgress); + }); + } + const int count = d->m_jobs.size(); bool lastExecSuccess = true; for (int j = 0; j < count; j++) {