From 305b99cf29cb9cd384087b0d4c052c60ebec8595 Mon Sep 17 00:00:00 2001 From: darkfi Date: Mon, 2 Sep 2024 15:45:09 +0200 Subject: [PATCH] wallet: chatview prevent touch updates if already in progress --- bin/darkwallet/src/ui/chatview/mod.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bin/darkwallet/src/ui/chatview/mod.rs b/bin/darkwallet/src/ui/chatview/mod.rs index 1aebc43fa..684bc7af9 100644 --- a/bin/darkwallet/src/ui/chatview/mod.rs +++ b/bin/darkwallet/src/ui/chatview/mod.rs @@ -29,7 +29,10 @@ use sled_overlay::sled; use std::{ hash::{DefaultHasher, Hash, Hasher}, io::Cursor, - sync::{atomic::Ordering, Arc, Mutex as SyncMutex, Weak}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Mutex as SyncMutex, Weak, + }, }; mod page; @@ -122,6 +125,7 @@ pub struct ChatView { mouse_pos: SyncMutex, /// Touch scrolling touch_info: SyncMutex, + touch_is_updating: AtomicBool, rect: PropertyPtr, scroll: PropertyFloat32, @@ -261,6 +265,7 @@ impl ChatView { mouse_pos: SyncMutex::new(Point::from([0., 0.])), touch_info: SyncMutex::new(TouchInfo::new()), + touch_is_updating: AtomicBool::new(false), rect, scroll, @@ -447,7 +452,10 @@ impl ChatView { touch_info.last_y = touch_y; } TouchPhase::Moved => { - let instant = std::time::Instant::now(); + if !self.touch_is_updating.fetch_or(true, Ordering::Relaxed) { + return + } + let (start_scroll, start_y, do_update) = { let mut touch_info = self.touch_info.lock().unwrap(); touch_info.last_y = touch_y; @@ -470,6 +478,8 @@ impl ChatView { if do_update { self.scrollview(scroll).await; } + + self.touch_is_updating.store(true, Ordering::Relaxed); } TouchPhase::Ended => { // Now calculate scroll acceleration