Only apply gtkrange value attribute when not being dragged (fixes #95)

This commit is contained in:
elkowar 2021-06-03 15:51:38 +02:00
parent d0df1e7419
commit cd5b001d89
No known key found for this signature in database
GPG key ID: E321AD71B1D1F27F

View file

@ -159,9 +159,25 @@ pub(super) fn resolve_container_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk:
pub(super) fn resolve_range_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Range) { pub(super) fn resolve_range_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Range) {
let on_change_handler_id: Rc<RefCell<Option<glib::SignalHandlerId>>> = Rc::new(RefCell::new(None)); let on_change_handler_id: Rc<RefCell<Option<glib::SignalHandlerId>>> = Rc::new(RefCell::new(None));
gtk_widget.set_sensitive(false); 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, { resolve_block!(bargs, gtk_widget, {
// @prop value - the value // @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 - the minimum value
prop(min: as_f64) { gtk_widget.get_adjustment().set_lower(min)}, prop(min: as_f64) { gtk_widget.get_adjustment().set_lower(min)},
// @prop max - the maximum value // @prop max - the maximum value