App: Fix some refference cycles.

This commit is contained in:
Jordan Petridis 2018-07-26 07:19:43 +03:00
parent d43fc268f4
commit 17da62d53b
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6

View File

@ -81,10 +81,14 @@ impl App {
let window = gtk::ApplicationWindow::new(application);
window.set_title("Podcasts");
window.connect_delete_event(clone!(settings => move |window, _| {
WindowGeometry::from_window(&window).write(&settings);
let weak_s = settings.downgrade();
window.connect_delete_event(move |window, _| {
weak_s
.upgrade()
.map(|settings| WindowGeometry::from_window(&window).write(&settings));
Inhibit(false)
}));
});
// Create a content instance
let content = Content::new(&sender).expect("Content Initialization failed.");
@ -131,8 +135,6 @@ impl App {
app.setup_gactions();
app.setup_timed_callbacks();
app.instance.connect_activate(move |_| ());
// Retrieve the previous window position and size.
WindowGeometry::from_settings(&app.settings).apply(&app.window);
@ -298,17 +300,23 @@ impl App {
let application = gtk::Application::new(APP_ID, ApplicationFlags::empty())
.expect("Application Initialization failed...");
application.connect_startup(clone!(application => move |_| {
info!("CONNECT STARTUP RUN");
let app = Self::new(&application);
Self::init(&app);
info!("Init complete");
application.connect_activate(clone!(app => move |_| {
info!("GApplication::activate");
app.window.activate();
}));
app.window.show_all();
}));
let weak_app = application.downgrade();
application.connect_startup(move |_| {
info!("GApplication::startup");
weak_app.upgrade().map(|application| {
let app = Self::new(&application);
Self::init(&app);
let weak = Rc::downgrade(&app);
application.connect_activate(move |_| {
info!("GApplication::activate");
weak.upgrade().map(|app| app.window.activate());
});
info!("Init complete");
app.window.show_all();
});
});
// Weird magic I copy-pasted that sets the Application Name in the Shell.
glib::set_application_name("Podcasts");