diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-29 14:32:05 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-29 14:32:05 +0200 |
| commit | 6df08042ae4509ef2c8fd469babf6eb1c1cfbabf (patch) | |
| tree | de208a999f0d85b053c0cd3fa9c670c4338c98a6 /app/src | |
| parent | 461c62c9a76bf0d2c2489bf54f9fc07db782e31e (diff) | |
| download | turns-6df08042ae4509ef2c8fd469babf6eb1c1cfbabf.tar.xz turns-6df08042ae4509ef2c8fd469babf6eb1c1cfbabf.zip | |
app: enable start with files to open
Diffstat (limited to 'app/src')
| -rw-r--r-- | app/src/main.cpp | 41 |
1 files changed, 34 insertions, 7 deletions
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 <sigc++/functors/mem_fun.h> +#include <glibmm/refptr.h> + +#include <giomm/application.h> + #include <gtkmm/builder.h> #include <adwaita.h> #include <libintl.h> #include <clocale> +#include <print> + +auto add_new_window(Glib::RefPtr<Gtk::Application> app, Glib::RefPtr<Gtk::Builder> builder) +{ + auto window = Gtk::Builder::get_widget_derived<turns::ui::windows::tracker>(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<turns::ui::windows::tracker>(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", "<Primary><Shift>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<turns::ui::windows::tracker *>(nullptr); + + if (windows.empty()) + { + window = add_new_window(app, builder); + } + else + { + window = dynamic_cast<turns::ui::windows::tracker *>(windows[0]); + } + window->present(); + window->load(files[0]); }); return app->run(argc, argv); |
