Headerbar: Use the Application Action instead of relying directly on Content.

This commit is contained in:
Jordan Petridis 2018-02-08 05:40:40 +02:00
parent 4ba82c1515
commit c5e0bf34cb
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 26 additions and 20 deletions

View File

@ -69,7 +69,7 @@ impl App {
Arc::new(Content::new(sender.clone()).expect("Content Initialization failed.")); Arc::new(Content::new(sender.clone()).expect("Content Initialization failed."));
// Create the headerbar // Create the headerbar
let header = Arc::new(Header::new(content.clone(), &window, sender.clone())); let header = Arc::new(Header::new(&content, &window, sender.clone()));
// Add the content main stack to the window. // Add the content main stack to the window.
window.add(&content.get_stack()); window.add(&content.get_stack());
@ -102,7 +102,10 @@ impl App {
// Run a database checkup once the application is initialized. // Run a database checkup once the application is initialized.
gtk::timeout_add(300, || { gtk::timeout_add(300, || {
let _ = checkup(); if let Err(err) = checkup() {
error!("Check up failed: {}", err);
}
glib::Continue(false) glib::Continue(false)
}); });
} }

View File

@ -1,13 +1,13 @@
use failure::Error;
use failure::ResultExt;
use gtk; use gtk;
use gtk::prelude::*; use gtk::prelude::*;
use failure::Error;
use failure::ResultExt;
use url::Url; use url::Url;
use hammond_data::Source; use hammond_data::Source;
use hammond_data::dbqueries; use hammond_data::dbqueries;
use std::sync::Arc;
use std::sync::mpsc::Sender; use std::sync::mpsc::Sender;
use app::Action; use app::Action;
@ -59,13 +59,13 @@ impl Default for Header {
// TODO: Refactor components into smaller state machines // TODO: Refactor components into smaller state machines
impl Header { impl Header {
pub fn new(content: Arc<Content>, window: &gtk::Window, sender: Sender<Action>) -> Header { pub fn new(content: &Content, window: &gtk::Window, sender: Sender<Action>) -> Header {
let h = Header::default(); let h = Header::default();
h.init(content, window, sender); h.init(content, window, sender);
h h
} }
pub fn init(&self, content: Arc<Content>, window: &gtk::Window, sender: Sender<Action>) { pub fn init(&self, content: &Content, window: &gtk::Window, sender: Sender<Action>) {
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui"); let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui");
let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap(); let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap();
@ -89,11 +89,12 @@ impl Header {
self.add_toggle.set_popover(&add_popover); self.add_toggle.set_popover(&add_popover);
self.update_button.connect_clicked(move |_| { self.update_button
.connect_clicked(clone!(sender => move |_| {
sender sender
.send(Action::UpdateSources(None)) .send(Action::UpdateSources(None))
.expect("Action channel blew up."); .expect("Action channel blew up.");
}); }));
self.about_button self.about_button
.connect_clicked(clone!(window => move |_| { .connect_clicked(clone!(window => move |_| {
@ -107,12 +108,14 @@ impl Header {
let add_toggle = &self.add_toggle; let add_toggle = &self.add_toggle;
let show_title = &self.show_title; let show_title = &self.show_title;
self.back_button.connect_clicked( self.back_button.connect_clicked(
clone!(content, switch, add_toggle, show_title => move |back| { clone!(switch, add_toggle, show_title, sender => move |back| {
switch.show(); switch.show();
add_toggle.show(); add_toggle.show();
back.hide(); back.hide();
show_title.hide(); show_title.hide();
content.get_shows().get_stack().set_visible_child_full("podcasts", gtk::StackTransitionType::SlideRight); if let Err(err) = sender.send(Action::ShowShowsAnimated) {
error!("Action channel blew up: {}", err);
}
}), }),
); );
} }