From 6df08042ae4509ef2c8fd469babf6eb1c1cfbabf Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 29 Jul 2024 14:32:05 +0200 Subject: app: enable start with files to open --- app/desktop.in | 2 +- app/src/main.cpp | 41 +++++++++++++++++++++++++++------ ui/include/turns/ui/windows/tracker.hpp | 2 ++ ui/src/windows/tracker.cpp | 10 ++++++++ 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/app/desktop.in b/app/desktop.in index 22d1f93..74d8ce4 100644 --- a/app/desktop.in +++ b/app/desktop.in @@ -5,5 +5,5 @@ Name[de]=Züge GenericName=Turn Tracker Icon=ch.arknet.Turns StartupNotify=true -Exec=@CMAKE_INSTALL_FULL_BINDIR@/turns +Exec=@CMAKE_INSTALL_FULL_BINDIR@/turns %u Categories=Utility \ No newline at end of file diff --git a/app/src/main.cpp b/app/src/main.cpp index 83840c1..3877f13 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -5,12 +5,28 @@ #include +#include + +#include + #include #include #include #include +#include + +auto add_new_window(Glib::RefPtr app, Glib::RefPtr builder) +{ + auto window = Gtk::Builder::get_widget_derived(builder, "tracker"); + app->add_window(*window); + app->signal_shutdown().connect([window] { + window->close(); + delete window; + }); + return window; +} auto main(int argc, char * argv[]) -> int { @@ -19,9 +35,8 @@ auto main(int argc, char * argv[]) -> int bind_textdomain_codeset("turns", "UTF-8"); textdomain("turns"); - auto app = turns::adw::Application::create("ch.arknet.Turns"); + auto app = turns::adw::Application::create("ch.arknet.Turns", Gio::Application::Flags::HANDLES_OPEN); auto builder = Gtk::Builder::create_from_resource("/windows/tracker.ui"); - auto window = Gtk::Builder::get_widget_derived(builder, "tracker"); app->signal_startup().connect([app] { turns::core::register_types(); @@ -41,14 +56,26 @@ auto main(int argc, char * argv[]) -> int app->set_accel_for_action("win.save-as", "s"); }); - app->signal_shutdown().connect([window] { - window->close(); - delete window; + app->signal_activate().connect([app, builder] { + auto window = add_new_window(app, builder); + window->present(); }); - app->signal_activate().connect([app, window] { - app->add_window(*window); + app->signal_open().connect([app, builder](auto files, auto) { + auto windows = app->get_windows(); + auto window = static_cast(nullptr); + + if (windows.empty()) + { + window = add_new_window(app, builder); + } + else + { + window = dynamic_cast(windows[0]); + } + window->present(); + window->load(files[0]); }); return app->run(argc, argv); diff --git a/ui/include/turns/ui/windows/tracker.hpp b/ui/include/turns/ui/windows/tracker.hpp index 03260f1..4dd0c7a 100644 --- a/ui/include/turns/ui/windows/tracker.hpp +++ b/ui/include/turns/ui/windows/tracker.hpp @@ -30,6 +30,8 @@ namespace turns::ui::windows { tracker(BaseObjectType * base, Glib::RefPtr const builder); + auto load(Glib::RefPtr file) -> void; + private: /** Setup */ auto setup_actions() -> void; diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp index e64eb18..66e241b 100644 --- a/ui/src/windows/tracker.cpp +++ b/ui/src/windows/tracker.cpp @@ -187,4 +187,14 @@ namespace turns::ui::windows } } + auto tracker::load(Glib::RefPtr file) -> void + { + if (file->query_exists()) + { + m_file = file; + m_file->load_contents_async(sigc::mem_fun(*this, &tracker::on_load_content_done)); + set_sensitive(false); + } + } + } // namespace turns::ui::windows -- cgit v1.2.3