max time window for double click
This commit is contained in:
parent
f72b1f8c45
commit
883843a72d
@ -10,7 +10,10 @@ use crate::{
|
||||
Rectangle, Size, Widget,
|
||||
};
|
||||
|
||||
use std::u32;
|
||||
use std::{
|
||||
time::{Duration, SystemTime},
|
||||
u32,
|
||||
};
|
||||
use unicode_segmentation::UnicodeSegmentation;
|
||||
|
||||
/// A field that can be filled with text.
|
||||
@ -215,6 +218,15 @@ where
|
||||
.last_position
|
||||
.unwrap_or(Point { x: 0.0, y: 0.0 })
|
||||
&& self.state.click_count < 2
|
||||
&& SystemTime::now()
|
||||
.duration_since(
|
||||
self.state
|
||||
.last_timestamp
|
||||
.unwrap_or(SystemTime::now()),
|
||||
)
|
||||
.unwrap_or(Duration::from_secs(1))
|
||||
.as_millis()
|
||||
<= 500
|
||||
{
|
||||
self.state.click_count += 1;
|
||||
|
||||
@ -236,6 +248,9 @@ where
|
||||
end: self.value.len(),
|
||||
}
|
||||
}
|
||||
|
||||
self.state.last_timestamp =
|
||||
Option::from(SystemTime::now());
|
||||
} else if target > 0.0 {
|
||||
let value = if self.is_secure {
|
||||
self.value.secure()
|
||||
@ -266,6 +281,8 @@ where
|
||||
self.state.click_count = 0;
|
||||
self.state.last_position =
|
||||
Option::from(cursor_position);
|
||||
self.state.last_timestamp =
|
||||
Option::from(SystemTime::now());
|
||||
} else {
|
||||
self.state.click_count = 0;
|
||||
self.state.last_position =
|
||||
@ -637,6 +654,7 @@ pub struct State {
|
||||
/// Double- / Tripleclick
|
||||
click_count: usize,
|
||||
last_position: Option<Point>,
|
||||
last_timestamp: Option<std::time::SystemTime>,
|
||||
// TODO: Add stateful horizontal scrolling offset
|
||||
}
|
||||
|
||||
@ -724,6 +742,7 @@ impl State {
|
||||
cursor_position: Cursor::Index(usize::MAX),
|
||||
click_count: 0,
|
||||
last_position: None,
|
||||
last_timestamp: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user