#include "turns/core/init.hpp" #include "turns/core/settings.hpp" #include "turns/ui/init.hpp" #include "turns/ui/windows/tracker.hpp" #include #include #include #include #include #include #include #include #include #include auto add_new_window(Glib::RefPtr app, Glib::RefPtr builder, Glib::RefPtr settings) { auto window = Gtk::Builder::get_widget_derived(builder, "tracker", settings); window->set_hide_on_close(true); window->signal_hide().connect([window] { delete window; }, true); app->add_window(*window); return window; } auto main(int argc, char * argv[]) -> int { setlocale(LC_ALL, ""); bindtextdomain("turns", LOCALEDIR); bind_textdomain_codeset("turns", "UTF-8"); textdomain("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 settings = turns::core::get_settings(); app->signal_startup().connect([app] { turns::core::register_types(); turns::ui::register_types(); auto style_manager = adw_style_manager_get_default(); adw_style_manager_set_color_scheme(style_manager, ADW_COLOR_SCHEME_PREFER_LIGHT); app->add_action("quit", sigc::mem_fun(*app, &turns::adw::Application::quit)); 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, builder, settings] { auto window = add_new_window(app, builder, settings); window->present(); }); app->signal_open().connect([app, builder, settings](auto files, auto) { auto windows = app->get_windows(); auto window = static_cast(nullptr); if (windows.empty()) { window = add_new_window(app, builder, settings); } else { window = dynamic_cast(windows[0]); } window->present(); window->load(files[0]); }); return app->run(argc, argv); }