Created
August 15, 2023 21:00
-
-
Save saivert/eff084f25dfedeae32ea4f40d5b45108 to your computer and use it in GitHub Desktop.
Bypass scroll handling for GtkScale (gtk-rs)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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