summaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2020-05-23 13:57:17 +0200
committerrabite <rabite@posteo.de>2020-05-23 13:57:17 +0200
commit446b6731e2cd0504ae8f481ab19365dba69df86d (patch)
tree096dbeb55ceee7e5b1354fe8f44851d2dd0a2e7c /src/files.rs
parent3f66d7f7dad8e9c057e587113446eea3bd0f31e3 (diff)
reduce flicker due to ticker
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/files.rs b/src/files.rs
index de00a28..f78f067 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -60,7 +60,7 @@ pub fn start_ticking(sender: Sender<Events>) {
use std::time::Duration;
IOTICK_CLIENTS.fetch_add(1, Ordering::Relaxed);
- if IOTICK_CLIENTS.load(Ordering::Acquire) == 1 {
+ if IOTICK_CLIENTS.load(Ordering::Relaxed) == 1 {
std::thread::spawn(move || {
IOTICK.store(0, Ordering::Relaxed);
@@ -76,7 +76,7 @@ pub fn start_ticking(sender: Sender<Events>) {
.unwrap();
// All jobs done?
- if IOTICK_CLIENTS.load(Ordering::Acquire) == 0 {
+ if IOTICK_CLIENTS.load(Ordering::Relaxed) == 0 {
IOTICK.store(0, Ordering::Relaxed);
return;
}
@@ -1647,3 +1647,32 @@ impl File {
self.path.short_string()
}
}
+
+
+
+// Small wrapper that simplifies stopping with more complex control flow
+pub struct Ticker {
+ invalidated: bool
+}
+
+impl Ticker {
+ pub fn start_ticking(sender: Sender<Events>) -> Self {
+ start_ticking(sender);
+ Ticker {
+ invalidated: false
+ }
+ }
+
+ pub fn stop_ticking(&mut self) {
+ stop_ticking();
+ self.invalidated = true;
+ }
+}
+
+impl Drop for Ticker {
+ fn drop(&mut self) {
+ if !self.invalidated {
+ self.stop_ticking();
+ }
+ }
+}