diff --git a/src/progress_bar.rs b/src/progress_bar.rs index 8c1c1335..5db0fa09 100644 --- a/src/progress_bar.rs +++ b/src/progress_bar.rs @@ -201,7 +201,7 @@ impl ProgressBar { pub fn inc(&self, delta: u64) { self.pos.inc(delta); let now = Instant::now(); - if self.pos.allow(now) { + if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { self.state().tick(now); } } @@ -233,14 +233,15 @@ impl ProgressBar { /// Update the `ProgressBar`'s inner [`ProgressState`] pub fn update(&self, f: impl FnOnce(&mut ProgressState)) { - self.state().update(Instant::now(), f) + self.state() + .update(Instant::now(), f, self.ticker.lock().unwrap().is_none()) } /// Sets the position of the progress bar pub fn set_position(&self, pos: u64) { self.pos.set(pos); let now = Instant::now(); - if self.pos.allow(now) { + if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { self.state().tick(now); } } diff --git a/src/state.rs b/src/state.rs index 67aab13c..108cbb50 100644 --- a/src/state.rs +++ b/src/state.rs @@ -84,9 +84,11 @@ impl BarState { } } - pub(crate) fn update(&mut self, now: Instant, f: impl FnOnce(&mut ProgressState)) { + pub(crate) fn update(&mut self, now: Instant, f: impl FnOnce(&mut ProgressState), tick: bool) { f(&mut self.state); - self.tick(now); + if tick { + self.tick(now); + } } pub(crate) fn set_length(&mut self, now: Instant, len: u64) {