diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index 0c3d2ab..bfc8cc3 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -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) -> Rc { 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 } diff --git a/scripts/test.sh b/scripts/test.sh index 25d1a40..83e3bb8 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -1,4 +1,4 @@ -#!/usr/bin/sh +#! /usr/bin/sh file="/.flatpak-info" if [ -f "$file" ]