diff --git a/src/app.rs b/src/app.rs index e01c1dfc..15056c9c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -19,23 +19,14 @@ use std::sync::Arc; const APPLICATION_ID: &str = "io.github.yggverse.Yoda"; pub struct App { + // Actions + action_update: Arc, + // Components + browser: Arc, + // Extras + database: Arc, // GTK app: Application, - // Components - //browser: Arc, - database: Arc, - // Actions - action_debug: Arc, - action_quit: Arc, - action_update: Arc, - action_tab_append: Arc, - action_tab_close: Arc, - action_tab_close_all: Arc, - action_tab_page_navigation_base: Arc, - action_tab_page_navigation_history_back: Arc, - action_tab_page_navigation_history_forward: Arc, - action_tab_page_navigation_reload: Arc, - action_tab_pin: Arc, } impl App { @@ -86,22 +77,28 @@ impl App { &["r"], ); + // Init components + let browser = Arc::new(Browser::new( + /*db.clone(),*/ + action_debug.simple(), + action_quit.simple(), + action_update.simple(), + action_tab_append.simple(), + action_tab_close.simple(), + action_tab_close_all.simple(), + action_tab_page_navigation_base.simple(), + action_tab_page_navigation_history_back.simple(), + action_tab_page_navigation_history_forward.simple(), + action_tab_page_navigation_reload.simple(), + action_tab_pin.simple(), + )); + // Return app struct Self { // Actions (SimpleAction) - action_debug: action_debug.simple(), - action_quit: action_quit.simple(), action_update: action_update.simple(), - action_tab_append: action_tab_append.simple(), - action_tab_close: action_tab_close.simple(), - action_tab_close_all: action_tab_close_all.simple(), - action_tab_page_navigation_base: action_tab_page_navigation_base.simple(), - action_tab_page_navigation_history_back: action_tab_page_navigation_history_back - .simple(), - action_tab_page_navigation_history_forward: action_tab_page_navigation_history_forward - .simple(), - action_tab_page_navigation_reload: action_tab_page_navigation_reload.simple(), - action_tab_pin: action_tab_pin.simple(), + // Components + browser, // Extras database, // GTK @@ -111,45 +108,15 @@ impl App { // Actions pub fn activate(&self) -> &Self { - // Init events self.app.connect_activate({ // let database = database.clone(); - let action_debug = self.action_debug.clone(); - let action_quit = self.action_quit.clone(); let action_update = self.action_update.clone(); - let action_tab_append = self.action_tab_append.clone(); - let action_tab_close = self.action_tab_close.clone(); - let action_tab_close_all = self.action_tab_close_all.clone(); - let action_tab_page_navigation_base = self.action_tab_page_navigation_base.clone(); - let action_tab_page_navigation_history_back = - self.action_tab_page_navigation_history_back.clone(); - let action_tab_page_navigation_history_forward = - self.action_tab_page_navigation_history_forward.clone(); - let action_tab_page_navigation_reload = self.action_tab_page_navigation_reload.clone(); - let action_tab_pin = self.action_tab_pin.clone(); - move |application| { - // Restore previous session - // @TODO - - // Init components - let browser = Arc::new(Browser::new( - &application, - /*db.clone(),*/ - action_debug.clone(), - action_quit.clone(), - action_update.clone(), - action_tab_append.clone(), - action_tab_close.clone(), - action_tab_close_all.clone(), - action_tab_page_navigation_base.clone(), - action_tab_page_navigation_history_back.clone(), - action_tab_page_navigation_history_forward.clone(), - action_tab_page_navigation_reload.clone(), - action_tab_pin.clone(), - )); + let browser = self.browser.clone(); + move |this| { + // @TODO restore previous session from DB // Activate events - browser.activate(); + browser.activate().widget().set_application(Some(this)); // Show main widget browser.widget().present(); @@ -159,6 +126,9 @@ impl App { } }); + // @TODO save session to DB + // self.app.connect_window_removed(|_, _| todo!()); + &self } diff --git a/src/app/browser.rs b/src/app/browser.rs index d3939e5c..8cef8973 100644 --- a/src/app/browser.rs +++ b/src/app/browser.rs @@ -7,7 +7,7 @@ use main::Main; use gtk::{ gio::SimpleAction, prelude::{ActionMapExt, GtkWindowExt}, - Application, ApplicationWindow, + ApplicationWindow, }; use std::sync::Arc; @@ -38,8 +38,6 @@ pub struct Browser { impl Browser { // Construct pub fn new( - // Dependencies - application: &Application, // Extras // connection: Arc, // Actions @@ -82,7 +80,6 @@ impl Browser { // Init widget let widget = ApplicationWindow::builder() - .application(application) .titlebar(header.widget()) .child(main.widget()) .default_height(DEFAULT_HEIGHT) @@ -112,7 +109,7 @@ impl Browser { } // Actions - pub fn activate(&self) { + pub fn activate(&self) -> &Self { // Assign actions self.widget.add_action(self.action_debug.as_ref()); self.widget.add_action(self.action_quit.as_ref()); @@ -211,6 +208,8 @@ impl Browser { main.tab_pin(); } }); + + &self } // Getters diff --git a/src/main.rs b/src/main.rs index 6c67d0cf..ee3d65b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,9 @@ fn main() -> ExitCode { Err(error) => panic!("Failed to connect profile database: {error}"), }; - // Start application - App::new(profile_database_connection).activate().run() + // Init GTK, start application + match gtk::init() { + Ok(_) => App::new(profile_database_connection).activate().run(), + Err(_) => ExitCode::FAILURE, + } }