#include "turns/app/application.hpp" #include "turns/core/init.hpp" #include "turns/ui/init.hpp" #include "turns/ui/windows/tracker.hpp" #include #include #include #include namespace turns::app { auto application::create() -> std::shared_ptr { Gtk::init_gtkmm_internals(); adw_init(); core::register_types(); ui::register_types(); return std::shared_ptr{new application{}}; } auto application::run(int argc, char * argv[]) -> int { return g_application_run(G_APPLICATION(m_adw), argc, argv); } application::application() { m_adw = adw_application_new("ch.arknet.Turns", G_APPLICATION_DEFAULT_FLAGS); m_application = Glib::wrap(GTK_APPLICATION(m_adw)); m_application->signal_activate().connect(sigc::mem_fun(*this, &application::on_activate)); m_application->signal_shutdown().connect(sigc::mem_fun(*this, &application::on_shutdown)); m_application->signal_startup().connect(sigc::mem_fun(*this, &application::on_startup)); } auto application::handle_action_quit() -> void { m_tracker->close(); } auto application::on_activate() -> void { auto builder = Gtk::Builder::create_from_resource("/windows/tracker.ui"); m_tracker = Gtk::Builder::get_widget_derived(builder, "tracker"); m_application->add_window(*m_tracker); m_tracker->present(); } auto application::on_shutdown() -> void { m_tracker->close(); delete m_tracker; } auto application::on_startup() -> void { auto style_manager = adw_style_manager_get_default(); adw_style_manager_set_color_scheme(style_manager, ADW_COLOR_SCHEME_PREFER_LIGHT); m_application->add_action("quit", sigc::mem_fun(*this, &application::handle_action_quit)); m_application->set_accel_for_action("app.quit", "q"); m_application->set_accel_for_action("win.clear", "x"); m_application->set_accel_for_action("win.next", "space"); m_application->set_accel_for_action("win.previous", "BackSpace"); m_application->set_accel_for_action("win.add_participant", "a"); } } // namespace turns::app