diff --git a/Cargo.toml b/Cargo.toml index bc28296..673a98f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "helvum" version = "0.4.1" -authors = ["Tom A. Wagner "] +authors = ["Tom Wagner "] edition = "2021" rust-version = "1.70" license = "GPL-3.0-only" @@ -15,7 +15,7 @@ categories = ["gui", "multimedia"] [dependencies] pipewire = "0.7.1" -adw = { version = "0.5", package = "libadwaita" } +adw = { version = "0.5", package = "libadwaita", features = ["v1_2"] } glib = { version = "0.18", features = ["log"] } log = "0.4.11" diff --git a/meson.build b/meson.build index 9136b00..e9421f5 100644 --- a/meson.build +++ b/meson.build @@ -10,9 +10,9 @@ gnome = import('gnome') base_id = 'org.pipewire.Helvum' -dependency('glib-2.0', version: '>= 2.66') -dependency('gtk4', version: '>= 4.4.0') -dependency('libadwaita-1') +dependency('glib-2.0', version: '>= 2.66') +dependency('gtk4', version: '>= 4.4.0') +dependency('libadwaita-1', version: '>= 1.2') dependency('libpipewire-0.3') desktop_file_validate = find_program('desktop-file-validate', required: false) diff --git a/src/application.rs b/src/application.rs index 26fce9a..c8acd75 100644 --- a/src/application.rs +++ b/src/application.rs @@ -26,6 +26,9 @@ use pipewire::channel::Sender; use crate::{graph_manager::GraphManager, ui, GtkMessage, PipewireMessage}; static STYLE: &str = include_str!("style.css"); +static APP_ID: &str = "org.pipewire.Helvum"; +static VERSION: &str = env!("CARGO_PKG_VERSION"); +static AUTHORS: &str = env!("CARGO_PKG_AUTHORS"); mod imp { use super::*; @@ -81,10 +84,50 @@ mod imp { &provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, ); + + self.setup_actions(); } } impl GtkApplicationImpl for Application {} impl AdwApplicationImpl for Application {} + + impl Application { + fn setup_actions(&self) { + let obj = &*self.obj(); + + // Add shortcut for quitting the application. + let quit = gtk::gio::SimpleAction::new("quit", None); + quit.connect_activate(clone!(@weak obj => move |_, _| { + obj.quit(); + })); + obj.set_accels_for_action("app.quit", &["Q"]); + obj.add_action(&quit); + + let action_about = gio::ActionEntry::builder("about") + .activate(|obj: &super::Application, _, _| { + obj.imp().show_about_dialog(); + }) + .build(); + obj.add_action_entries([action_about]); + } + + fn show_about_dialog(&self) { + let authors: Vec<&str> = AUTHORS.split(':').collect(); + + let about_window = adw::AboutWindow::builder() + .application_icon(APP_ID) + .application_name("Helvum") + .developer_name("Tom Wagner") + .developers(authors) + .version(VERSION) + .website("https://gitlab.freedesktop.org/pipewire/helvum") + .issue_url("https://gitlab.freedesktop.org/pipewire/helvum/-/issues") + .license_type(gtk::License::Gpl30Only) + .build(); + + about_window.present(); + } + } } glib::wrapper! { @@ -101,7 +144,7 @@ impl Application { pw_sender: Sender, ) -> Self { let app: Application = glib::Object::builder() - .property("application-id", "org.pipewire.Helvum") + .property("application-id", APP_ID) .build(); let imp = app.imp(); @@ -114,14 +157,6 @@ impl Application { )) .expect("Should be able to set graph manager"); - // Add shortcut for quitting the application. - let quit = gtk::gio::SimpleAction::new("quit", None); - quit.connect_activate(clone!(@weak app => move |_, _| { - app.quit(); - })); - app.set_accels_for_action("app.quit", &["Q"]); - app.add_action(&quit); - app } } diff --git a/src/ui/window.ui b/src/ui/window.ui index f29fbe6..251c04b 100644 --- a/src/ui/window.ui +++ b/src/ui/window.ui @@ -2,6 +2,14 @@ + +
+ + _About Helvum + app.about + +
+