diff --git a/src/app.rs b/src/app.rs index b8bc5afd..313269df 100644 --- a/src/app.rs +++ b/src/app.rs @@ -13,7 +13,7 @@ use gtk::{ }; use sqlite::Connection; -use std::sync::Arc; +use std::{path::PathBuf, sync::Arc}; const APPLICATION_ID: &str = "io.github.yggverse.Yoda"; @@ -30,7 +30,7 @@ pub struct App { impl App { // Construct - pub fn new(profile_database_connection: Arc) -> Self { + pub fn new(profile_database_connection: Arc, profile_path: PathBuf) -> Self { // Init database model let database = match Database::init(profile_database_connection) { Ok(database) => Arc::new(database), @@ -83,6 +83,7 @@ impl App { // Init components let browser = Arc::new(Browser::new( /*db.clone(),*/ + profile_path, action_tool_debug.simple(), action_tool_profile_directory.simple(), action_quit.simple(), diff --git a/src/app/browser.rs b/src/app/browser.rs index eea22e41..8c326373 100644 --- a/src/app/browser.rs +++ b/src/app/browser.rs @@ -5,11 +5,11 @@ use header::Header; use main::Main; use gtk::{ - gio::SimpleAction, + gio::{AppInfo, AppLaunchContext, SimpleAction}, prelude::{ActionMapExt, GtkWindowExt}, ApplicationWindow, }; -use std::sync::Arc; +use std::{path::PathBuf, sync::Arc}; const DEFAULT_HEIGHT: i32 = 480; const DEFAULT_WIDTH: i32 = 640; @@ -28,6 +28,7 @@ impl Browser { pub fn new( // Extras // connection: Arc, + profile_path: PathBuf, // Actions action_tool_debug: Arc, action_tool_profile_directory: Arc, @@ -100,7 +101,11 @@ impl Browser { action_tool_profile_directory.connect_activate({ move |_, _| { - // @TODO + // @TODO [4_10] https://docs.gtk.org/gtk4/class.FileLauncher.html + let _ = AppInfo::launch_default_for_uri( + &format!("file://{}", profile_path.to_string_lossy()), + Some(&AppLaunchContext::new()), + ); } }); diff --git a/src/main.rs b/src/main.rs index 821dcd85..6ea672b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,7 @@ fn main() -> ExitCode { // Init GTK, start application match gtk::init() { - Ok(_) => App::new(profile_database_connection).run(), + Ok(_) => App::new(profile_database_connection, profile_path).run(), Err(_) => ExitCode::FAILURE, } }