fix(ui): restore slider double-click reset

This commit is contained in:
Brad Stein 2026-04-23 04:47:48 -03:00
parent ca10c667f5
commit 0e00772952

View File

@ -1588,12 +1588,34 @@ fn stabilize_button(button: &gtk::Button, width: i32) {
/// Resets one slider to its default value on double-click.
fn attach_scale_reset_gesture(scale: &gtk::Scale, default_value: f64) {
let gesture = gtk::GestureClick::new();
gesture.set_button(0);
gesture.set_button(1);
gesture.set_propagation_phase(gtk::PropagationPhase::Capture);
let scale_for_click = scale.clone();
gesture.connect_released(move |_, n_press, _, _| {
if n_press == 2 && (scale_for_click.value() - default_value).abs() > f64::EPSILON {
gesture.connect_pressed(move |_, n_press, _, _| {
if should_reset_scale_on_double_click(n_press, scale_for_click.value(), default_value) {
scale_for_click.set_value(default_value);
}
});
scale.add_controller(gesture);
}
fn should_reset_scale_on_double_click(
n_press: i32,
current_value: f64,
default_value: f64,
) -> bool {
n_press == 2 && (current_value - default_value).abs() > f64::EPSILON
}
#[cfg(test)]
mod tests {
use super::should_reset_scale_on_double_click;
#[test]
fn scale_reset_helper_requires_a_true_double_click_and_a_real_change() {
assert!(!should_reset_scale_on_double_click(1, 350.0, 200.0));
assert!(!should_reset_scale_on_double_click(2, 200.0, 200.0));
assert!(should_reset_scale_on_double_click(2, 350.0, 200.0));
assert!(should_reset_scale_on_double_click(2, 75.0, 100.0));
}
}