bin/mdv in mdv-0.5.1 vs bin/mdv in mdv-0.6.0

- old
+ new

@@ -1,15 +1,59 @@ #!/usr/bin/env ruby # frozen_string_literal: true require "mdv" -Gtk.init +myapp = Gtk::Application.new("net.matijs.mdv", + { handles_open: true }) -WebKit2::WebContext.get_default.set_cache_model :document_viewer +def make_window(app) + win = Gtk::ApplicationWindow.new app + close_action = Gio::SimpleAction.new("close", nil) + close_action.signal_connect("activate") { win.destroy } + win.add_action close_action + win +end -file = ARGV[0] -raise "Need file" unless file +myapp.signal_connect "startup" do |app| + WebKit2::WebContext.get_default.set_cache_model :document_viewer -MDV::MarkdownViewer.new file + action = Gio::SimpleAction.new("quit", nil) + action.signal_connect("activate") { app.quit } + myapp.add_action action -Gtk.main + myapp.set_accels_for_action "app.quit", ["<Ctrl>Q"] + myapp.set_accels_for_action "win.close", ["<Ctrl>W"] + myapp.set_accels_for_action "win.reload", ["<Ctrl>R"] + + # Add menu so Atspi has a way to access the actions + menu = Gio::Menu.new + file_menu = Gio::Menu.new + file_menu.append "Close Window", "win.close" + file_menu.append "Quit", "app.quit" + menu.append_submenu "File", file_menu + view_menu = Gio::Menu.new + view_menu.append "Reload", "win.reload" + menu.append_submenu "View", view_menu + + myapp.menubar = menu +end + +myapp.signal_connect "activate" do |app, _user_data| + win = make_window(app) + win.show_all + win.children.first.visible = false +end + +myapp.signal_connect "open" do |app, files, _hint, _user_data| + files.each do |file| + filename = file.path + win = make_window(app) + MDV::MarkdownViewer.new win, filename + win.show_all + + # This hides the menubar but keeps it available for Atspi + win.children.first.visible = false + end +end + +exit(myapp.run([$PROGRAM_NAME] + ARGV))