diff --git a/src/gui/widget/progresswindow.cpp b/src/gui/widget/progresswindow.cpp index 539094345..68b416439 100644 --- a/src/gui/widget/progresswindow.cpp +++ b/src/gui/widget/progresswindow.cpp @@ -79,7 +79,7 @@ void CProgressWindow::Init( signal *statusSignal, if (globalSignal) *globalSignal->connect(mem_fun(*this, &CProgressWindow::showGlobalStatus)); - global_progress = local_progress = 0; + global_progress = local_progress = percent_progress = 0; showFooter(false); @@ -91,6 +91,8 @@ void CProgressWindow::Init( signal *statusSignal, status_txt->doPaintBg(false); addWindowItem(status_txt); + cur_statusText = string(); + //create local_bar object local_bar = getProgressItem(); @@ -128,10 +130,16 @@ CProgressBar* CProgressWindow::getProgressItem() void CProgressWindow::initStatus(const unsigned int prog, const unsigned int max, const string &statusText, CProgressBar *pBar) { pBar->allowPaint(true); - pBar->setValues(prog, (int)max); - if (!statusText.empty()) - showStatusMessageUTF(statusText); - pBar->paint(false); + unsigned int cur_perc = prog*100/(max+1); + if (percent_progress != cur_perc || prog == 0){ + pBar->setValues(prog, (int)max); + if (!statusText.empty() && (cur_statusText != statusText)){ + showStatusMessageUTF(statusText); + cur_statusText = statusText; + } + pBar->paint(false); + percent_progress = cur_perc; + } } void CProgressWindow::showStatus(const unsigned int prog, const unsigned int max, const string &statusText) diff --git a/src/gui/widget/progresswindow.h b/src/gui/widget/progresswindow.h index 4943fb0e2..1be4255a9 100644 --- a/src/gui/widget/progresswindow.h +++ b/src/gui/widget/progresswindow.h @@ -39,6 +39,8 @@ class CProgressWindow : public CComponentsWindow, public CMenuTarget unsigned int global_progress; unsigned int local_progress; + unsigned int percent_progress; + std::string cur_statusText; int h_height; void Init( sigc::signal *statusSignal, sigc::signal *localSignal,