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/src/main.cpp | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'app/src') 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); -- cgit v1.2.3