EpisodeWidget: Only initialize the episode once it's first drawn.

This commit is contained in:
Jordan Petridis 2018-07-17 15:57:52 +03:00
parent fe024502d4
commit 1ab0291483
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 19 additions and 5 deletions

View File

@ -17,6 +17,7 @@ use hammond_data::EpisodeWidgetModel;
use app::Action;
use manager;
use std::cell::RefCell;
use std::rc::Rc;
use std::sync::{Arc, Mutex, TryLockError};
@ -208,10 +209,23 @@ impl Default for EpisodeWidget {
impl EpisodeWidget {
pub fn new(episode: EpisodeWidgetModel, sender: &Sender<Action>) -> Rc<Self> {
let widget = Rc::new(Self::default());
widget.info.init(&episode);
Self::determine_buttons_state(&widget, &episode, sender)
.map_err(|err| error!("Error: {}", err))
.ok();
let episode = RefCell::new(Some(episode));
// let weak = Rc::downgrade(widget);
let widget_ = widget.clone();
let sender = sender.clone();
widget.container.connect_draw(move |_, _| {
episode.borrow_mut().take().map(|ep| {
// widget.upgrade().map(|widget| {
widget_.info.init(&ep);
// FIXME: THERE IS A REFFERENCE CYCLE HERE
Self::determine_buttons_state(&widget_, &ep, &sender)
.map_err(|err| error!("Error: {}", err))
.ok();
// })
});
gtk::Inhibit(false)
});
widget
}

View File

@ -1,4 +1,4 @@
#!/usr/bin/sh
#! /usr/bin/sh
file="/.flatpak-info"
if [ -f "$file" ]