Skip to content

Commit 2e29777

Browse files
Desktop: Support triple-click inputs (#3671)
* Fix triple-click text to select paragraph on desktop * fixup --------- Co-authored-by: Timon <me@timon.zip>
1 parent 8e8428a commit 2e29777

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

desktop/src/cef/input/state.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,25 +139,26 @@ impl ClickTracker {
139139

140140
let prev_time = record.time;
141141
let prev_position = record.position;
142+
let prev_count: ClickCount = record.down_count;
142143

143144
let now = Instant::now();
144145
record.time = now;
145146
record.position = position;
146147

147148
match state {
148-
ElementState::Pressed if record.down_count == ClickCount::Double => {
149+
ElementState::Pressed if record.down_count == ClickCount::Triple => {
149150
*record = ClickRecord {
150-
down_count: ClickCount::Single,
151+
down_count: ClickCount::Double,
151152
..*record
152153
};
153-
return ClickCount::Single;
154+
return ClickCount::Double;
154155
}
155-
ElementState::Released if record.up_count == ClickCount::Double => {
156+
ElementState::Released if record.up_count == ClickCount::Triple => {
156157
*record = ClickRecord {
157-
up_count: ClickCount::Single,
158+
up_count: ClickCount::Double,
158159
..*record
159160
};
160-
return ClickCount::Single;
161+
return ClickCount::Double;
161162
}
162163
_ => {}
163164
}
@@ -167,7 +168,11 @@ impl ClickTracker {
167168
let within_dist = dx <= MULTICLICK_ALLOWED_TRAVEL && dy <= MULTICLICK_ALLOWED_TRAVEL;
168169
let within_time = now.saturating_duration_since(prev_time) <= MULTICLICK_TIMEOUT;
169170

170-
let count = if within_time && within_dist { ClickCount::Double } else { ClickCount::Single };
171+
let count = match (prev_count, within_time, within_dist) {
172+
(ClickCount::Double, true, true) => ClickCount::Triple,
173+
(_, true, true) => ClickCount::Double,
174+
_ => ClickCount::Single,
175+
};
171176

172177
*record = match state {
173178
ElementState::Pressed => ClickRecord { down_count: count, ..*record },
@@ -182,12 +187,14 @@ pub(crate) enum ClickCount {
182187
#[default]
183188
Single,
184189
Double,
190+
Triple,
185191
}
186192
impl From<ClickCount> for i32 {
187193
fn from(count: ClickCount) -> i32 {
188194
match count {
189195
ClickCount::Single => 1,
190196
ClickCount::Double => 2,
197+
ClickCount::Triple => 3,
191198
}
192199
}
193200
}

0 commit comments

Comments
 (0)