diff --git a/desktop/src/cef/input/state.rs b/desktop/src/cef/input/state.rs index 79fa65eee1..fcaaa9152a 100644 --- a/desktop/src/cef/input/state.rs +++ b/desktop/src/cef/input/state.rs @@ -139,20 +139,21 @@ impl ClickTracker { let prev_time = record.time; let prev_position = record.position; + let prev_count: ClickCount = record.down_count; let now = Instant::now(); record.time = now; record.position = position; match state { - ElementState::Pressed if record.down_count == ClickCount::Double => { + ElementState::Pressed if record.down_count == ClickCount::Triple => { *record = ClickRecord { down_count: ClickCount::Single, ..*record }; return ClickCount::Single; } - ElementState::Released if record.up_count == ClickCount::Double => { + ElementState::Released if record.up_count == ClickCount::Triple => { *record = ClickRecord { up_count: ClickCount::Single, ..*record @@ -167,7 +168,11 @@ impl ClickTracker { let within_dist = dx <= MULTICLICK_ALLOWED_TRAVEL && dy <= MULTICLICK_ALLOWED_TRAVEL; let within_time = now.saturating_duration_since(prev_time) <= MULTICLICK_TIMEOUT; - let count = if within_time && within_dist { ClickCount::Double } else { ClickCount::Single }; + let count = match (prev_count, within_time, within_dist) { + (ClickCount::Double, true, true) => ClickCount::Triple, + (_, true, true) => ClickCount::Double, + _ => ClickCount::Single, + }; *record = match state { ElementState::Pressed => ClickRecord { down_count: count, ..*record }, @@ -182,12 +187,14 @@ pub(crate) enum ClickCount { #[default] Single, Double, + Triple, } impl From for i32 { fn from(count: ClickCount) -> i32 { match count { ClickCount::Single => 1, ClickCount::Double => 2, + ClickCount::Triple => 3, } } }