From cbe50c91630175f14d17e6df4371cbf6b8ac321a Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sun, 22 Oct 2017 04:32:03 +0300 Subject: [PATCH] OK OK, neat trick, clone on &A/RC gives back A/RC. --- hammond-gtk/src/headerbar.rs | 10 +++++----- hammond-gtk/src/main.rs | 2 +- hammond-gtk/src/utils.rs | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index faaac3c..579e84f 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -10,7 +10,7 @@ use utils; use std::sync::{Arc, Mutex}; -pub fn get_headerbar(db: Arc>, stack: gtk::Stack) -> gtk::HeaderBar { +pub fn get_headerbar(db: Arc>, stack: >k::Stack) -> gtk::HeaderBar { let builder = include_str!("../gtk/headerbar.ui"); let builder = gtk::Builder::new_from_string(builder); @@ -34,7 +34,7 @@ pub fn get_headerbar(db: Arc>, stack: gtk::Stack) -> gtk add_button.connect_clicked(move |_| { let url = new_url.get_text().unwrap_or_default(); - on_add_bttn_clicked(db_clone.clone(), stack_clone.clone(), &url); + on_add_bttn_clicked(db_clone.clone(), &stack_clone, &url); // TODO: lock the button instead of hiding and add notification of feed added. // TODO: map the spinner @@ -55,13 +55,13 @@ pub fn get_headerbar(db: Arc>, stack: gtk::Stack) -> gtk let db_clone = db.clone(); // FIXME: There appears to be a memmory leak here. refresh_button.connect_clicked(move |_| { - utils::refresh_db(db_clone.clone(), stack_clone.clone()); + utils::refresh_db(db_clone.clone(), &stack_clone); }); header } -fn on_add_bttn_clicked(db: Arc>, stack: gtk::Stack, url: &str) { +fn on_add_bttn_clicked(db: Arc>, stack: >k::Stack, url: &str) { let source = { let tempdb = db.lock().unwrap(); index_feed::insert_return_source(&tempdb, &url) @@ -70,7 +70,7 @@ fn on_add_bttn_clicked(db: Arc>, stack: gtk::Stack, url: if let Ok(mut s) = source { // update the db - utils::refresh_feed(db.clone(), stack.clone(), &mut s); + utils::refresh_feed(db.clone(), &stack, &mut s); } else { error!("Expected Error, feed probably already exists."); error!("Error: {:?}", source.unwrap_err()); diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs index 742cf9c..a085c26 100644 --- a/hammond-gtk/src/main.rs +++ b/hammond-gtk/src/main.rs @@ -55,7 +55,7 @@ fn build_ui(app: >k::Application) { }); // Get the headerbar - let header = headerbar::get_headerbar(db.clone(), stack.clone()); + let header = headerbar::get_headerbar(db.clone(), &stack); // TODO: add delay, cause else theres lock contention for the db obj. // utils::refresh_db(db.clone(), stack.clone()); window.set_titlebar(&header); diff --git a/hammond-gtk/src/utils.rs b/hammond-gtk/src/utils.rs index 8b86db8..800aac6 100644 --- a/hammond-gtk/src/utils.rs +++ b/hammond-gtk/src/utils.rs @@ -24,14 +24,14 @@ thread_local!( gtk::Stack, Receiver)>> = RefCell::new(None)); -pub fn refresh_db(db: Arc>, stack: gtk::Stack) { +pub fn refresh_db(db: Arc>, stack: >k::Stack) { // Create a async channel. let (sender, receiver) = channel(); let db_clone = db.clone(); // Pass the desired arguments into the Local Thread Storage. GLOBAL.with(move |global| { - *global.borrow_mut() = Some((db_clone, stack, receiver)); + *global.borrow_mut() = Some((db_clone, stack.clone(), receiver)); }); // The implementation of how this is done is probably terrible but it works!. @@ -50,12 +50,12 @@ pub fn refresh_db(db: Arc>, stack: gtk::Stack) { }); } -pub fn refresh_feed(db: Arc>, stack: gtk::Stack, source: &mut Source) { +pub fn refresh_feed(db: Arc>, stack: >k::Stack, source: &mut Source) { let (sender, receiver) = channel(); let db_clone = db.clone(); GLOBAL.with(move |global| { - *global.borrow_mut() = Some((db_clone, stack, receiver)); + *global.borrow_mut() = Some((db_clone, stack.clone(), receiver)); }); let db_clone = db.clone();