diff --git a/hammond-gtk/resources/gtk/headerbar.ui b/hammond-gtk/resources/gtk/headerbar.ui
index 291502c..8033dd0 100644
--- a/hammond-gtk/resources/gtk/headerbar.ui
+++ b/hammond-gtk/resources/gtk/headerbar.ui
@@ -364,6 +364,7 @@ Tobias Bernard
True
False
About
+ app.about
False
diff --git a/hammond-gtk/resources/gtk/menus.ui b/hammond-gtk/resources/gtk/menus.ui
new file mode 100644
index 0000000..1155b65
--- /dev/null
+++ b/hammond-gtk/resources/gtk/menus.ui
@@ -0,0 +1,30 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/hammond-gtk/resources/resources.xml b/hammond-gtk/resources/resources.xml
index b8e1c75..8a61736 100644
--- a/hammond-gtk/resources/resources.xml
+++ b/hammond-gtk/resources/resources.xml
@@ -1,6 +1,6 @@
-
+
gtk/episode_widget.ui
gtk/show_widget.ui
gtk/empty_view.ui
@@ -11,6 +11,7 @@
gtk/shows_child.ui
gtk/headerbar.ui
gtk/inapp_notif.ui
+ gtk/menus.ui
gtk/style.css
diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs
index 4668aa3..76dce3a 100644
--- a/hammond-gtk/src/app.rs
+++ b/hammond-gtk/src/app.rs
@@ -1,6 +1,6 @@
#![allow(new_without_default)]
-use gio::{ApplicationExt, ApplicationExtManual, ApplicationFlags, Settings, SettingsExt};
+use gio::{ApplicationExt, ApplicationExtManual, ApplicationFlags, Settings, SettingsExt, SimpleAction, SimpleActionExt, ActionMapExt};
use glib;
use gtk;
use gtk::prelude::*;
@@ -67,6 +67,19 @@ impl App {
let window = gtk::Window::new(gtk::WindowType::Toplevel);
window.set_title("Hammond");
+ // Ideally a lot more than actions would happen in startup & window
+ // creation would be in activate
+ application.connect_startup(clone!(window => move |app| {
+ let about = SimpleAction::new("about", None);
+ // Should investigate use of active_window here
+ about.connect_activate(clone!(window => move |_, _| about_dialog(&window)));
+ app.add_action(&about);
+
+ let quit = SimpleAction::new("quit", None);
+ quit.connect_activate(clone!(app => move |_, _| app.quit()));
+ app.add_action(&quit);
+ }));
+
window.connect_delete_event(clone!(application, settings, window => move |_, _| {
WindowGeometry::from_window(&window).write(&settings);
application.quit();
@@ -224,3 +237,40 @@ fn build_ui(window: >k::Window, app: >k::Application) {
window.activate();
app.connect_activate(move |_| ());
}
+
+// Totally copied it from fractal.
+// https://gitlab.gnome.org/danigm/fractal/blob/503e311e22b9d7540089d735b92af8e8f93560c5/fractal-gtk/src/app.rs#L1883-1912
+fn about_dialog(window: >k::Window) {
+ // Feel free to add yourself if you contribured.
+ let authors = &[
+ "Constantin Nickel",
+ "Gabriele Musco",
+ "James Wykeham-Martin",
+ "Jordan Petridis",
+ "Julian Sparber",
+ "Rowan Lewis",
+ "Zander Brown"
+ ];
+
+ let dialog = gtk::AboutDialog::new();
+ // Waiting for a logo.
+ // dialog.set_logo_icon_name("org.gnome.Hammond");
+ dialog.set_logo_icon_name("multimedia-player");
+ dialog.set_comments("Podcast Client for the GNOME Desktop.");
+ dialog.set_copyright("© 2017, 2018 Jordan Petridis");
+ dialog.set_license_type(gtk::License::Gpl30);
+ dialog.set_modal(true);
+ // TODO: make it show it fetches the commit hash from which it was built
+ // and the version number is kept in sync automaticly
+ dialog.set_version("0.3.3");
+ dialog.set_program_name("Hammond");
+ // TODO: Need a wiki page first.
+ // dialog.set_website("https://wiki.gnome.org/Design/Apps/Potential/Podcasts");
+ // dialog.set_website_label("Learn more about Hammond");
+ dialog.set_transient_for(window);
+
+ dialog.set_artists(&["Tobias Bernard"]);
+ dialog.set_authors(authors);
+
+ dialog.show();
+}
diff --git a/hammond-gtk/src/appnotif.rs b/hammond-gtk/src/appnotif.rs
index 22b0c6e..2c87049 100644
--- a/hammond-gtk/src/appnotif.rs
+++ b/hammond-gtk/src/appnotif.rs
@@ -21,7 +21,7 @@ pub struct InAppNotification {
impl Default for InAppNotification {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/inapp_notif.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/inapp_notif.ui");
let revealer: gtk::Revealer = builder.get_object("revealer").unwrap();
let text: gtk::Label = builder.get_object("text").unwrap();
diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs
index 597a96c..4cdaf52 100644
--- a/hammond-gtk/src/headerbar.rs
+++ b/hammond-gtk/src/headerbar.rs
@@ -23,7 +23,6 @@ pub struct Header {
switch: gtk::StackSwitcher,
back: gtk::Button,
show_title: gtk::Label,
- about: gtk::ModelButton,
import: gtk::ModelButton,
export: gtk::ModelButton,
update_button: gtk::ModelButton,
@@ -34,7 +33,7 @@ pub struct Header {
impl Default for Header {
fn default() -> Header {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/headerbar.ui");
let header = builder.get_object("headerbar").unwrap();
let add_toggle = builder.get_object("add_toggle").unwrap();
@@ -47,7 +46,6 @@ impl Default for Header {
let update_box = builder.get_object("update_notification").unwrap();
let update_label = builder.get_object("update_label").unwrap();
let update_spinner = builder.get_object("update_spinner").unwrap();
- let about = builder.get_object("about").unwrap();
Header {
container: header,
@@ -55,7 +53,6 @@ impl Default for Header {
switch,
back,
show_title,
- about,
import,
export,
update_button,
@@ -75,7 +72,7 @@ impl Header {
}
pub fn init(&self, content: &Content, window: >k::Window, sender: &Sender) {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/headerbar.ui");
let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap();
let new_url: gtk::Entry = builder.get_object("new_url").unwrap();
@@ -107,9 +104,6 @@ impl Header {
}));
}));
- self.about
- .connect_clicked(clone!(window => move |_| about_dialog(&window)));
-
self.import.connect_clicked(
clone!(window, sender => move |_| on_import_clicked(&window, &sender)),
);
@@ -288,39 +282,3 @@ fn on_import_clicked(window: >k::Window, sender: &Sender) {
dialog.run();
}
-
-// Totally copied it from fractal.
-// https://gitlab.gnome.org/danigm/fractal/blob/503e311e22b9d7540089d735b92af8e8f93560c5/fractal-gtk/src/app.rs#L1883-1912
-fn about_dialog(window: >k::Window) {
- // Feel free to add yourself if you contribured.
- let authors = &[
- "Constantin Nickel",
- "Gabriele Musco",
- "James Wykeham-Martin",
- "Jordan Petridis",
- "Julian Sparber",
- "Rowan Lewis",
- ];
-
- let dialog = gtk::AboutDialog::new();
- // Waiting for a logo.
- // dialog.set_logo_icon_name("org.gnome.Hammond");
- dialog.set_logo_icon_name("multimedia-player");
- dialog.set_comments("Podcast Client for the GNOME Desktop.");
- dialog.set_copyright("© 2017, 2018 Jordan Petridis");
- dialog.set_license_type(gtk::License::Gpl30);
- dialog.set_modal(true);
- // TODO: make it show it fetches the commit hash from which it was built
- // and the version number is kept in sync automaticly
- dialog.set_version("0.3.3");
- dialog.set_program_name("Hammond");
- // TODO: Need a wiki page first.
- // dialog.set_website("https://wiki.gnome.org/Design/Apps/Potential/Podcasts");
- // dialog.set_website_label("Learn more about Hammond");
- dialog.set_transient_for(window);
-
- dialog.set_artists(&["Tobias Bernard"]);
- dialog.set_authors(authors);
-
- dialog.show();
-}
diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs
index 78d9027..c8d4227 100644
--- a/hammond-gtk/src/main.rs
+++ b/hammond-gtk/src/main.rs
@@ -86,7 +86,7 @@ fn main() {
// Add custom style
let provider = gtk::CssProvider::new();
- gtk::CssProvider::load_from_resource(&provider, "/org/gnome/hammond/gtk/style.css");
+ gtk::CssProvider::load_from_resource(&provider, "/org/gnome/Hammond/gtk/style.css");
gtk::StyleContext::add_provider_for_screen(
&gdk::Screen::get_default().expect("Error initializing gtk css provider."),
&provider,
diff --git a/hammond-gtk/src/widgets/empty.rs b/hammond-gtk/src/widgets/empty.rs
index ad3d152..444de79 100644
--- a/hammond-gtk/src/widgets/empty.rs
+++ b/hammond-gtk/src/widgets/empty.rs
@@ -7,7 +7,7 @@ pub struct EmptyView {
impl Default for EmptyView {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/empty_view.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/empty_view.ui");
let view: gtk::Box = builder.get_object("empty_view").unwrap();
EmptyView { container: view }
diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs
index 01ae0ff..d938e92 100644
--- a/hammond-gtk/src/widgets/episode.rs
+++ b/hammond-gtk/src/widgets/episode.rs
@@ -33,7 +33,7 @@ pub struct EpisodeWidget {
impl Default for EpisodeWidget {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episode_widget.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/episode_widget.ui");
let container: gtk::Box = builder.get_object("episode_container").unwrap();
let progress: gtk::ProgressBar = builder.get_object("progress_bar").unwrap();
diff --git a/hammond-gtk/src/widgets/home_view.rs b/hammond-gtk/src/widgets/home_view.rs
index c3359cb..1341fea 100644
--- a/hammond-gtk/src/widgets/home_view.rs
+++ b/hammond-gtk/src/widgets/home_view.rs
@@ -49,7 +49,7 @@ pub struct HomeView {
impl Default for HomeView {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/episodes_view.ui");
let container: gtk::Box = builder.get_object("container").unwrap();
let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap();
let frame_parent: gtk::Box = builder.get_object("frame_parent").unwrap();
@@ -180,7 +180,7 @@ struct HomeEpisode {
impl Default for HomeEpisode {
fn default() -> Self {
let builder =
- gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view_widget.ui");
+ gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/episodes_view_widget.ui");
let container: gtk::Box = builder.get_object("container").unwrap();
let image: gtk::Image = builder.get_object("cover").unwrap();
let ep = EpisodeWidget::default();
@@ -197,7 +197,7 @@ impl Default for HomeEpisode {
impl HomeEpisode {
fn new(episode: EpisodeWidgetQuery, sender: &Sender) -> HomeEpisode {
let builder =
- gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view_widget.ui");
+ gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/episodes_view_widget.ui");
let container: gtk::Box = builder.get_object("container").unwrap();
let image: gtk::Image = builder.get_object("cover").unwrap();
let pid = episode.podcast_id();
@@ -224,4 +224,4 @@ impl HomeEpisode {
fn set_cover(&self, podcast_id: i32) -> Result<(), Error> {
utils::set_image_from_path(&self.image, podcast_id, 64)
}
-}
+}
\ No newline at end of file
diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs
index 674e693..388ae12 100644
--- a/hammond-gtk/src/widgets/show.rs
+++ b/hammond-gtk/src/widgets/show.rs
@@ -41,7 +41,7 @@ pub struct ShowWidget {
impl Default for ShowWidget {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/show_widget.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/show_widget.ui");
let container: gtk::Box = builder.get_object("container").unwrap();
let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap();
let episodes = builder.get_object("episodes").unwrap();
@@ -79,7 +79,7 @@ impl ShowWidget {
}
pub fn init(&mut self, pd: &Arc, sender: &Sender) {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/show_widget.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/show_widget.ui");
self.unsub
.connect_clicked(clone!(pd, sender => move |bttn| {
@@ -189,7 +189,7 @@ fn populate_listbox(
}));
if count == 0 {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/empty_show.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/empty_show.ui");
let container: gtk::Box = builder.get_object("empty_show").unwrap();
show.episodes.add(&container);
return Ok(());
diff --git a/hammond-gtk/src/widgets/shows_view.rs b/hammond-gtk/src/widgets/shows_view.rs
index d9dc9e7..ad7982e 100644
--- a/hammond-gtk/src/widgets/shows_view.rs
+++ b/hammond-gtk/src/widgets/shows_view.rs
@@ -28,7 +28,7 @@ pub struct ShowsView {
impl Default for ShowsView {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/shows_view.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/shows_view.ui");
let container: gtk::Box = builder.get_object("fb_parent").unwrap();
let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap();
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
@@ -129,7 +129,7 @@ struct ShowsChild {
impl Default for ShowsChild {
fn default() -> Self {
- let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/shows_child.ui");
+ let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/shows_child.ui");
let container: gtk::Box = builder.get_object("fb_child").unwrap();
let cover: gtk::Image = builder.get_object("pd_cover").unwrap();