EpisodeWidget: Only initialize the episode once it's first drawn.
This commit is contained in:
parent
fe024502d4
commit
1ab0291483
@ -17,6 +17,7 @@ use hammond_data::EpisodeWidgetModel;
|
|||||||
use app::Action;
|
use app::Action;
|
||||||
use manager;
|
use manager;
|
||||||
|
|
||||||
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::sync::{Arc, Mutex, TryLockError};
|
use std::sync::{Arc, Mutex, TryLockError};
|
||||||
|
|
||||||
@ -208,10 +209,23 @@ impl Default for EpisodeWidget {
|
|||||||
impl EpisodeWidget {
|
impl EpisodeWidget {
|
||||||
pub fn new(episode: EpisodeWidgetModel, sender: &Sender<Action>) -> Rc<Self> {
|
pub fn new(episode: EpisodeWidgetModel, sender: &Sender<Action>) -> Rc<Self> {
|
||||||
let widget = Rc::new(Self::default());
|
let widget = Rc::new(Self::default());
|
||||||
widget.info.init(&episode);
|
let episode = RefCell::new(Some(episode));
|
||||||
Self::determine_buttons_state(&widget, &episode, sender)
|
// 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))
|
.map_err(|err| error!("Error: {}", err))
|
||||||
.ok();
|
.ok();
|
||||||
|
// })
|
||||||
|
});
|
||||||
|
|
||||||
|
gtk::Inhibit(false)
|
||||||
|
});
|
||||||
widget
|
widget
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/sh
|
#! /usr/bin/sh
|
||||||
|
|
||||||
file="/.flatpak-info"
|
file="/.flatpak-info"
|
||||||
if [ -f "$file" ]
|
if [ -f "$file" ]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user