From: Nil Gradisnik Date: Sat, 16 Dec 2017 08:02:02 +0000 (-0800) Subject: Added application menu X-Git-Url: https://git.ozva.co.uk/?a=commitdiff_plain;h=193b1093cab21b5afc084de6fb844721861d18c3;p=gn-editor Added application menu --- diff --git a/src/gtk-ui.glade b/src/gtk-ui.glade index 2f6f110..28e83a8 100644 --- a/src/gtk-ui.glade +++ b/src/gtk-ui.glade @@ -50,7 +50,9 @@ Author: Nil Gradisnik center 800 480 + text-x-generic True + False True @@ -143,19 +145,6 @@ Author: Nil Gradisnik document-open - - - True - False - About - True - gtk-about - - - end - 3 - - diff --git a/src/main.rs b/src/main.rs index 0679ef8..180e281 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,23 @@ // http://gtk-rs.org +extern crate comrak; extern crate gio; extern crate gtk; -extern crate sourceview; -extern crate comrak; #[macro_use] extern crate horrorshow; +extern crate sourceview; mod preview; mod utils; -use std::env::args; - use gio::prelude::*; use gtk::prelude::*; use gtk::Builder; +use gio::MenuExt; -use utils::{buffer_to_string, open_file, set_title, configure_sourceview}; +use std::env::args; + +use utils::{buffer_to_string, configure_sourceview, open_file, set_title}; const NAME: &str = env!("CARGO_PKG_NAME"); const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -41,10 +42,36 @@ macro_rules! clone { ); } +fn build_system_menu(application: >k::Application) { + let menu = gio::Menu::new(); + + menu.append("About", "app.about"); + menu.append("Quit", "app.quit"); + + application.set_app_menu(&menu); +} + +fn add_actions(application: >k::Application, window: >k::ApplicationWindow, about_dialog: >k::AboutDialog) { + let quit = gio::SimpleAction::new("quit", None); + quit.connect_activate(clone!(window => move |_, _| { + window.destroy(); + })); + + let about = gio::SimpleAction::new("about", None); + about.connect_activate(clone!(about_dialog => move |_, _| { + about_dialog.show(); + })); + + application.add_action(&about); + application.add_action(&quit); +} + fn build_ui(application: >k::Application) { let glade_src = include_str!("gtk-ui.glade"); let builder = Builder::new(); - builder.add_from_string(glade_src).expect("Builder couldn't add from string"); + builder + .add_from_string(glade_src) + .expect("Builder couldn't add from string"); let window: gtk::ApplicationWindow = builder.get_object("window").expect("Couldn't get window"); window.set_application(application); @@ -53,7 +80,6 @@ fn build_ui(application: >k::Application) { header_bar.set_title(NAME); let open_button: gtk::ToolButton = builder.get_object("open_button").unwrap(); - let about_button: gtk::ToolButton = builder.get_object("about_button").unwrap(); let text_view: sourceview::View = builder.get_object("text_view").unwrap(); let text_buffer: sourceview::Buffer = builder.get_object("text_buffer").unwrap(); @@ -95,10 +121,6 @@ fn build_ui(application: >k::Application) { Inhibit(true) })); - about_button.connect_clicked(clone!(about_dialog => move |_| { - about_dialog.show(); - })); - about_dialog.connect_delete_event(clone!(about_dialog => move |_, _| { about_dialog.hide(); Inhibit(true) @@ -109,12 +131,16 @@ fn build_ui(application: >k::Application) { Inhibit(false) })); + build_system_menu(application); + add_actions(application, &window, &about_dialog); + window.show_all(); } fn main() { - let application = gtk::Application::new("com.github.markdown-rs", gio::ApplicationFlags::empty()) - .expect("Initialization failed..."); + let application = + gtk::Application::new("com.github.markdown-rs", gio::ApplicationFlags::empty()) + .expect("Initialization failed..."); application.connect_startup(move |app| { build_ui(app); diff --git a/src/preview.rs b/src/preview.rs index d0fba92..cce88dc 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -1,4 +1,3 @@ - // https://github.com/Stebalien/horrorshow-rs use horrorshow::Raw; use horrorshow::helper::doctype; diff --git a/src/utils.rs b/src/utils.rs index 964291a..4c75ada 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,11 +1,10 @@ - use std::fs::File; use std::io::prelude::*; use std::io::BufReader; use gtk::*; use sourceview::*; -use std::path::{PathBuf}; +use std::path::PathBuf; pub fn set_title(header_bar: &HeaderBar, path: &PathBuf) { if let Some(file_name) = path.file_name() {