Player: Fix a refference cycle
This commit is contained in:
parent
5699562133
commit
cc4b3cce55
@ -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: >k::Scale, player: &gst_player::Player) -> SignalHandlerId {
|
fn connect_update_slider(
|
||||||
slider.connect_value_changed(clone!(player => move |slider| {
|
slider: >k::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));
|
||||||
}))
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user