Player: Fix a refference cycle

This commit is contained in:
Jordan Petridis 2018-08-13 06:33:10 +03:00
parent 5699562133
commit cc4b3cce55
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6

View File

@ -6,7 +6,7 @@ use gtk;
use gtk::prelude::*; use gtk::prelude::*;
use gio::{File, FileExt}; use gio::{File, FileExt};
use glib::SignalHandlerId; use glib::{SignalHandlerId, WeakRef};
use chrono::NaiveTime; use chrono::NaiveTime;
use crossbeam_channel::Sender; use crossbeam_channel::Sender;
@ -204,7 +204,8 @@ impl Default for PlayerWidget {
let separator = builder.get_object("separator").unwrap(); let separator = builder.get_object("separator").unwrap();
let slider: gtk::Scale = builder.get_object("seek").unwrap(); let slider: gtk::Scale = builder.get_object("seek").unwrap();
slider.set_range(0.0, 1.0); slider.set_range(0.0, 1.0);
let slider_update = Rc::new(Self::connect_update_slider(&slider, &player)); let player_weak = player.downgrade();
let slider_update = Rc::new(Self::connect_update_slider(&slider, player_weak));
let timer = PlayerTimes { let timer = PlayerTimes {
container: timer_container, container: timer_container,
progressed, progressed,
@ -385,11 +386,19 @@ impl PlayerWidget {
Ok(()) Ok(())
} }
fn connect_update_slider(slider: &gtk::Scale, player: &gst_player::Player) -> SignalHandlerId { fn connect_update_slider(
slider.connect_value_changed(clone!(player => move |slider| { slider: &gtk::Scale,
player: WeakRef<gst_player::Player>,
) -> SignalHandlerId {
slider.connect_value_changed(move |slider| {
let player = match player.upgrade() {
Some(p) => p,
None => return,
};
let value = slider.get_value() as u64; let value = slider.get_value() as u64;
player.seek(ClockTime::from_seconds(value)); player.seek(ClockTime::from_seconds(value));
})) })
} }
} }