diff --git a/client/src/launcher/ui_components.rs b/client/src/launcher/ui_components.rs index 1a9b750..a3ed20c 100644 --- a/client/src/launcher/ui_components.rs +++ b/client/src/launcher/ui_components.rs @@ -1588,12 +1588,34 @@ fn stabilize_button(button: >k::Button, width: i32) { /// Resets one slider to its default value on double-click. fn attach_scale_reset_gesture(scale: >k::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)); + } +}