]> OzVa Git service - gn-editor/commitdiff
Added application menu
authorNil Gradisnik <nil@layer.com>
Sat, 16 Dec 2017 08:02:02 +0000 (00:02 -0800)
committerNil Gradisnik <nil@layer.com>
Sat, 16 Dec 2017 08:02:02 +0000 (00:02 -0800)
src/gtk-ui.glade
src/main.rs
src/preview.rs
src/utils.rs

index 2f6f1105070658c7c8307bca0ba300a1421cf1ed..28e83a818070b0073226c56fb9b0e774044f0443 100644 (file)
@@ -50,7 +50,9 @@ Author: Nil Gradisnik
     <property name="window_position">center</property>
     <property name="default_width">800</property>
     <property name="default_height">480</property>
+    <property name="icon_name">text-x-generic</property>
     <property name="has_resize_grip">True</property>
+    <property name="show_menubar">False</property>
     <child>
       <object class="GtkBox" id="v_box">
         <property name="visible">True</property>
@@ -143,19 +145,6 @@ Author: Nil Gradisnik
             <property name="icon_name">document-open</property>
           </object>
         </child>
-        <child>
-          <object class="GtkToolButton" id="about_button">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">About</property>
-            <property name="use_underline">True</property>
-            <property name="stock_id">gtk-about</property>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-            <property name="position">3</property>
-          </packing>
-        </child>
       </object>
     </child>
   </object>
index 0679ef8224b2372df26e8cf8ae031a7bd5306231..180e28129744f305ad8984fe6217af4feb3983f0 100644 (file)
@@ -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: &gtk::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: &gtk::Application, window: &gtk::ApplicationWindow, about_dialog: &gtk::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: &gtk::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: &gtk::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: &gtk::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: &gtk::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);
index d0fba92c142832956e2366653f8307a69ebefc1f..cce88dcb46284bba4629e4ffaa8fc8dba08cc463 100644 (file)
@@ -1,4 +1,3 @@
-
 // https://github.com/Stebalien/horrorshow-rs
 use horrorshow::Raw;
 use horrorshow::helper::doctype;
index 964291a00c1eee9cdfd206166670011a4269aaf4..4c75ada4eb37d229c264305c8c71f80d09a43076 100644 (file)
@@ -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() {