summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xmloff/ProgressBarHelper.hxx1
-rw-r--r--xmloff/source/core/ProgressBarHelper.cxx11
2 files changed, 9 insertions, 3 deletions
diff --git a/include/xmloff/ProgressBarHelper.hxx b/include/xmloff/ProgressBarHelper.hxx
index 521ee4cb2406..748fb4e95c87 100644
--- a/include/xmloff/ProgressBarHelper.hxx
+++ b/include/xmloff/ProgressBarHelper.hxx
@@ -36,6 +36,7 @@ class XMLOFF_DLLPUBLIC ProgressBarHelper
sal_Int32 nRange;
sal_Int32 nReference;
sal_Int32 nValue;
+ double fOldPercent;
bool bStrict;
// #96469#; if the value goes over the Range the progressbar starts again
bool bRepeat;
diff --git a/xmloff/source/core/ProgressBarHelper.cxx b/xmloff/source/core/ProgressBarHelper.cxx
index ef7292f0fd7e..09f12d699850 100644
--- a/xmloff/source/core/ProgressBarHelper.cxx
+++ b/xmloff/source/core/ProgressBarHelper.cxx
@@ -25,6 +25,7 @@
using namespace ::com::sun::star;
static const sal_Int32 nDefaultProgressBarRange = 1000000;
+static const float fProgressStep = 0.5;
ProgressBarHelper::ProgressBarHelper(const css::uno::Reference < css::task::XStatusIndicator>& xTempStatusIndicator,
const bool bTempStrict)
@@ -32,6 +33,7 @@ ProgressBarHelper::ProgressBarHelper(const css::uno::Reference < css::task::XSta
, nRange(nDefaultProgressBarRange)
, nReference(100)
, nValue(0)
+, fOldPercent(0.0)
, bStrict(bTempStrict)
, bRepeat(true)
#ifdef DBG_UTIL
@@ -86,9 +88,12 @@ void ProgressBarHelper::SetValue(sal_Int32 nTempValue)
double fValue(nValue);
double fNewValue ((fValue * nRange) / nReference);
- xStatusIndicator->setValue((sal_Int32)fNewValue);
-
- // #95181# disabled, because we want to call setValue very often to enable a good reschedule
+ double fPercent((fNewValue * 100) / nRange);
+ if (fPercent >= (fOldPercent + fProgressStep) || fPercent < fOldPercent)
+ {
+ xStatusIndicator->setValue((sal_Int32)fNewValue);
+ fOldPercent = fPercent;
+ }
}
#ifdef DBG_UTIL
else if (!bFailure)