summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-29 14:32:05 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-29 14:32:05 +0200
commit6df08042ae4509ef2c8fd469babf6eb1c1cfbabf (patch)
treede208a999f0d85b053c0cd3fa9c670c4338c98a6 /app
parent461c62c9a76bf0d2c2489bf54f9fc07db782e31e (diff)
downloadturns-6df08042ae4509ef2c8fd469babf6eb1c1cfbabf.tar.xz
turns-6df08042ae4509ef2c8fd469babf6eb1c1cfbabf.zip
app: enable start with files to open
Diffstat (limited to 'app')
-rw-r--r--app/desktop.in2
-rw-r--r--app/src/main.cpp41
2 files changed, 35 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);