/* * SPDX-FileCopyrightText: 2025 Felix Morgner * SPDX-License-Identifier: LGPL-2.1-only */ #include "init.hpp" #include "resources.hpp" #include "settings.hpp" #include "tracker.hpp" #include #include #include #include #include #include #include #include #include #include #include #include namespace { auto show_about(Glib::RefPtr app) { auto active_window = app->get_active_window(); auto dialog = Gtk::make_managed(Turns::gui::resource::metainfo_xml, ""); dialog->present(active_window); } } // namespace auto main(int argc, char ** argv) -> int { setlocale(LC_ALL, ""); bindtextdomain("turns", LOCALEDIR); bind_textdomain_codeset("turns", "UTF-8"); textdomain("turns"); auto app = Adwaita::Application::create("ch.arknet.Turns", Gio::Application::Flags::HANDLES_OPEN); Turns::init(); Turns::gui::init(); app->signal_startup().connect([app] { auto style_manager = Adwaita::StyleManager::get_default(); style_manager->set_color_scheme(Adwaita::ColorScheme::PreferLight); app->add_action("quit", sigc::mem_fun(*app, &Adwaita::Application::quit)); app->add_action("about", sigc::bind(&show_about, app)); app->set_accel_for_action("app.quit", "q"); app->set_accel_for_action("win.clear", "x"); app->set_accel_for_action("win.next", "space"); app->set_accel_for_action("win.previous", "BackSpace"); app->set_accel_for_action("win.add_participant", "a"); app->set_accel_for_action("win.open", "o"); app->set_accel_for_action("win.preferences", "comma"); app->set_accel_for_action("win.save", "s"); app->set_accel_for_action("win.save-as", "s"); }); auto settings = Turns::gui::get_settings(); app->signal_activate().connect([app, settings] { auto window = new Turns::gui::Tracker{app, settings}; window->present(); }); app->signal_open().connect([app, settings](auto files, auto) { auto windows = app->get_windows(); auto window = static_cast(nullptr); if (windows.empty()) { window = new Turns::gui::Tracker{app, settings}; } else { window = dynamic_cast(windows[0]); } window->present(); window->load(files[0]); }); app->signal_window_removed().connect([](auto window) { auto tracker = dynamic_cast(window); if (tracker) { delete tracker; } }); return app->run(argc, argv); }