diff --git a/src/plugins/coreplugin/progressmanager/futureprogress.cpp b/src/plugins/coreplugin/progressmanager/futureprogress.cpp index bdf32c5a3fe7a8b8bd507de6d7348876416999e6..c4df54c760e375fa7a900f456a21516bdc7c419d 100644 --- a/src/plugins/coreplugin/progressmanager/futureprogress.cpp +++ b/src/plugins/coreplugin/progressmanager/futureprogress.cpp @@ -243,11 +243,7 @@ void FutureProgress::setFinished() { updateToolTip(d->m_watcher.future().progressText()); - // Special case for concurrent jobs that don't use QFutureInterface to report progress - if (d->m_watcher.progressMinimum() == 0 && d->m_watcher.progressMaximum() == 0) { - d->m_progress->setRange(0, 1); - d->m_progress->setValue(1); - } + d->m_progress->setFinished(true); if (d->m_watcher.future().isCanceled()) { d->m_progress->setError(true); diff --git a/src/plugins/coreplugin/progressmanager/progressbar.cpp b/src/plugins/coreplugin/progressmanager/progressbar.cpp index 5d3e6f108cc70db15007b3465b4084de9cca0f27..b3b28d5733911fe4d189c3c19c6107cae4b02084 100644 --- a/src/plugins/coreplugin/progressmanager/progressbar.cpp +++ b/src/plugins/coreplugin/progressmanager/progressbar.cpp @@ -48,7 +48,7 @@ using namespace Core::Internal; #define CANCELBUTTON_SIZE 15 ProgressBar::ProgressBar(QWidget *parent) - : QWidget(parent), m_error(false), m_minimum(1), m_maximum(100), m_value(1), m_cancelButtonFader(0) + : QWidget(parent), m_error(false), m_minimum(1), m_maximum(100), m_value(1), m_cancelButtonFader(0), m_finished(false) { setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); setMouseTracking(true); @@ -110,6 +110,14 @@ void ProgressBar::setValue(int value) update(); } +void ProgressBar::setFinished(bool b) +{ + if (b == m_finished) + return; + m_finished = b; + update(); +} + QString ProgressBar::title() const { return m_title; @@ -183,6 +191,9 @@ void ProgressBar::paintEvent(QPaintEvent *) else if (percent < 0) percent = 0; + if (finished()) + percent = 1; + QPainter p(this); QFont boldFont(p.font()); boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize()); @@ -238,7 +249,7 @@ void ProgressBar::paintEvent(QPaintEvent *) // avoid too small red bar if (inner.width() < 10) inner.adjust(0, 0, 10 - inner.width(), 0); - } else if (value() == maximum() && range != 0) { + } else if (m_finished) { c = QColor(90, 170, 60); } diff --git a/src/plugins/coreplugin/progressmanager/progressbar.h b/src/plugins/coreplugin/progressmanager/progressbar.h index e56663c7d3e443eb1ba251aa0543c648d6adca18..423d83f7964aec45bed57371a9221d3c523a370b 100644 --- a/src/plugins/coreplugin/progressmanager/progressbar.h +++ b/src/plugins/coreplugin/progressmanager/progressbar.h @@ -60,9 +60,11 @@ public: int minimum() const { return m_minimum; } int maximum() const { return m_maximum; } int value() const { return m_value; } + bool finished() const { return m_finished; } void reset(); void setRange(int minimum, int maximum); void setValue(int value); + void setFinished(bool b); float cancelButtonFader() { return m_cancelButtonFader; } void setCancelButtonFader(float value) { update(); m_cancelButtonFader= value;} bool event(QEvent *); @@ -83,6 +85,7 @@ private: int m_maximum; int m_value; float m_cancelButtonFader; + bool m_finished; }; } // namespace Internal