From cd5b001d894a7507e92350defedd5bb47462ac74 Mon Sep 17 00:00:00 2001 From: elkowar <5300871+elkowar@users.noreply.github.com> Date: Thu, 3 Jun 2021 15:51:38 +0200 Subject: [PATCH] Only apply gtkrange value attribute when not being dragged (fixes #95) --- src/widgets/widget_definitions.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/widgets/widget_definitions.rs b/src/widgets/widget_definitions.rs index 7d4c42a..266d5c6 100644 --- a/src/widgets/widget_definitions.rs +++ b/src/widgets/widget_definitions.rs @@ -159,9 +159,25 @@ pub(super) fn resolve_container_attrs(bargs: &mut BuilderArgs, gtk_widget: >k: pub(super) fn resolve_range_attrs(bargs: &mut BuilderArgs, gtk_widget: >k::Range) { let on_change_handler_id: Rc>> = Rc::new(RefCell::new(None)); gtk_widget.set_sensitive(false); + + // only allow changing the value via the value property if the user isn't currently dragging + let is_being_dragged = Rc::new(RefCell::new(false)); + gtk_widget.connect_button_press_event(glib::clone!(@strong is_being_dragged => move |_, _| { + *is_being_dragged.borrow_mut() = true; + gtk::Inhibit(false) + })); + gtk_widget.connect_button_release_event(glib::clone!(@strong is_being_dragged => move |_, _| { + *is_being_dragged.borrow_mut() = false; + gtk::Inhibit(false) + })); + resolve_block!(bargs, gtk_widget, { // @prop value - the value - prop(value: as_f64) { gtk_widget.set_value(value)}, + prop(value: as_f64) { + if !*is_being_dragged.borrow() { + gtk_widget.set_value(value) + } + }, // @prop min - the minimum value prop(min: as_f64) { gtk_widget.get_adjustment().set_lower(min)}, // @prop max - the maximum value