From a714ddf59fdb9b74af8d9b8158a421605dab6179 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 3 Aug 2022 15:14:49 +0200 Subject: [PATCH] VcsCommand: Create ProgressTimer manually The QFutureInterface::get() method was introduced in 6.3, so we can't use it yet. Create ProgressTimer manually in the caller thread for the future passed to ProgressManager::addTask(). Amends a5683616b938deffa290f95aaa7f747c239360d7 Change-Id: I1f96c433e759d66eaaa1a32489e9db4facecf46a Reviewed-by: Christian Stenger --- src/plugins/vcsbase/vcscommand.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) 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++) {