#include "turns/core/init.hpp" #include "turns/core/settings.hpp" #include "turns/ui/init.hpp" #include "turns/ui/tracker.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include auto show_about(Glib::RefPtr app) { auto active_window = app->get_active_window(); auto dialog = Gtk::make_managed("/ch/arknet/Turns/metainfo.xml", ""); dialog->present(active_window); } 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); auto settings = turns::core::get_settings(); turns::core::register_types(); app->signal_startup().connect([app] { turns::ui::register_types(); 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"); }); app->signal_activate().connect([app, settings] { auto window = new turns::ui::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::ui::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); }