Skip to content

Instantly share code, notes, and snippets.

@saivert
Created August 15, 2023 21:00
Show Gist options
  • Save saivert/eff084f25dfedeae32ea4f40d5b45108 to your computer and use it in GitHub Desktop.
Save saivert/eff084f25dfedeae32ea4f40d5b45108 to your computer and use it in GitHub Desktop.
Bypass scroll handling for GtkScale (gtk-rs)
impl WidgetImpl for PwVolumeBox {
fn map(&self) {
self.parent_map();
// Hack until I have a better way of getting at the scrolled window
// ListBox Box Viewport Scrolled window
let p = self.obj().parent().unwrap().parent().unwrap().parent().unwrap().parent().unwrap();
let scrolledwindow: gtk::ScrolledWindow = p.downcast().expect("downcast to scrolled window");
let ecs = gtk::EventControllerScroll::new(gtk::EventControllerScrollFlags::BOTH_AXES);
ecs.set_propagation_phase(gtk::PropagationPhase::Capture);
ecs.set_propagation_limit(gtk::PropagationLimit::SameNative);
// Need to actually handle the scroll event in order to block propagation to the GtkScale widget
ecs.connect_local("scroll", false, clone!(@weak scrolledwindow => @default-return None, move |v| {
let y: f64 = v.get(2).unwrap().get().unwrap();
dbg!(&y);
// No way to redirect this event to underlying widget so we need to reimplement the scroll handling
let adjustment = scrolledwindow.vadjustment();
adjustment.set_value(adjustment.value() + y*adjustment.step_increment());
Some(true.to_value())
}));
self.volume_scale.parent().unwrap().add_controller(ecs);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment