diff options
| -rw-r--r-- | app/desktop.in | 2 | ||||
| -rw-r--r-- | app/src/main.cpp | 41 | ||||
| -rw-r--r-- | ui/include/turns/ui/windows/tracker.hpp | 2 | ||||
| -rw-r--r-- | ui/src/windows/tracker.cpp | 10 |
4 files changed, 47 insertions, 8 deletions
diff --git a/app/desktop.in b/app/desktop.in index 22d1f93..74d8ce4 100644 --- a/app/desktop.in +++ b/app/desktop.in @@ -5,5 +5,5 @@ Name[de]=Züge GenericName=Turn Tracker Icon=ch.arknet.Turns StartupNotify=true -Exec=@CMAKE_INSTALL_FULL_BINDIR@/turns +Exec=@CMAKE_INSTALL_FULL_BINDIR@/turns %u Categories=Utility
\ No newline at end of file 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); diff --git a/ui/include/turns/ui/windows/tracker.hpp b/ui/include/turns/ui/windows/tracker.hpp index 03260f1..4dd0c7a 100644 --- a/ui/include/turns/ui/windows/tracker.hpp +++ b/ui/include/turns/ui/windows/tracker.hpp @@ -30,6 +30,8 @@ namespace turns::ui::windows { tracker(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder); + auto load(Glib::RefPtr<Gio::File> file) -> void; + private: /** Setup */ auto setup_actions() -> void; diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp index e64eb18..66e241b 100644 --- a/ui/src/windows/tracker.cpp +++ b/ui/src/windows/tracker.cpp @@ -187,4 +187,14 @@ namespace turns::ui::windows } } + auto tracker::load(Glib::RefPtr<Gio::File> file) -> void + { + if (file->query_exists()) + { + m_file = file; + m_file->load_contents_async(sigc::mem_fun(*this, &tracker::on_load_content_done)); + set_sensitive(false); + } + } + } // namespace turns::ui::windows |
