Browse Source

activate gtk before build children widgets, add browser pointer to the app struct

master
yggverse 2 months ago
parent
commit
b6fa1016f6
  1. 92
      src/app.rs
  2. 9
      src/app/browser.rs
  3. 7
      src/main.rs

92
src/app.rs

@ -19,23 +19,14 @@ use std::sync::Arc; @@ -19,23 +19,14 @@ use std::sync::Arc;
const APPLICATION_ID: &str = "io.github.yggverse.Yoda";
pub struct App {
// GTK
app: Application,
// Components
//browser: Arc<Browser>,
database: Arc<Database>,
// Actions
action_debug: Arc<SimpleAction>,
action_quit: Arc<SimpleAction>,
action_update: Arc<SimpleAction>,
action_tab_append: Arc<SimpleAction>,
action_tab_close: Arc<SimpleAction>,
action_tab_close_all: Arc<SimpleAction>,
action_tab_page_navigation_base: Arc<SimpleAction>,
action_tab_page_navigation_history_back: Arc<SimpleAction>,
action_tab_page_navigation_history_forward: Arc<SimpleAction>,
action_tab_page_navigation_reload: Arc<SimpleAction>,
action_tab_pin: Arc<SimpleAction>,
// Components
browser: Arc<Browser>,
// Extras
database: Arc<Database>,
// GTK
app: Application,
}
impl App {
@ -86,22 +77,28 @@ impl App { @@ -86,22 +77,28 @@ impl App {
&["<Primary>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 { @@ -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 { @@ -159,6 +126,9 @@ impl App {
}
});
// @TODO save session to DB
// self.app.connect_window_removed(|_, _| todo!());
&self
}

9
src/app/browser.rs

@ -7,7 +7,7 @@ use main::Main; @@ -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 { @@ -38,8 +38,6 @@ pub struct Browser {
impl Browser {
// Construct
pub fn new(
// Dependencies
application: &Application,
// Extras
// connection: Arc<sqlite::Connection>,
// Actions
@ -82,7 +80,6 @@ impl Browser { @@ -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 { @@ -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 { @@ -211,6 +208,8 @@ impl Browser {
main.tab_pin();
}
});
&self
}
// Getters

7
src/main.rs

@ -26,6 +26,9 @@ fn main() -> ExitCode { @@ -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,
}
}

Loading…
Cancel
Save