/* gtd-application.c * * Copyright (C) 2015-2020 Georges Basile Stavracas Neto * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #define G_LOG_DOMAIN "GtdApplication" #include "config.h" #include "gtd-application.h" #include "gtd-debug.h" #include "gtd-initial-setup-window.h" #include "gtd-log.h" #include "gtd-manager.h" #include "gtd-manager-protected.h" #include "gtd-vcs.h" #include "gtd-window.h" #include #include #include #include #include struct _GtdApplication { AdwApplication application; GtkWindow *window; GtkWidget *initial_setup; }; static void gtd_application_activate_action (GSimpleAction *simple, GVariant *parameter, gpointer user_data); static void gtd_application_show_about (GSimpleAction *simple, GVariant *parameter, gpointer user_data); static void gtd_application_quit (GSimpleAction *simple, GVariant *parameter, gpointer user_data); static void gtd_application_show_help (GSimpleAction *simple, GVariant *parameter, gpointer user_data); G_DEFINE_TYPE (GtdApplication, gtd_application, ADW_TYPE_APPLICATION) static GOptionEntry cmd_options[] = { { "quit", 'q', 0, G_OPTION_ARG_NONE, NULL, N_("Quit Endeavour"), NULL }, { "debug", 'd', 0, G_OPTION_ARG_NONE, NULL, N_("Enable debug messages"), NULL }, { "version", 'v', 0, G_OPTION_ARG_NONE, NULL, N_("Print version information and exit"), NULL }, { NULL } }; static const GActionEntry gtd_application_entries[] = { { "activate", gtd_application_activate_action }, { "about", gtd_application_show_about }, { "quit", gtd_application_quit }, { "help", gtd_application_show_help } }; static void gtd_application_activate_action (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GtdApplication *self = GTD_APPLICATION (user_data); gtk_window_present (GTK_WINDOW (self->window)); } static void gtd_application_show_about (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GtdApplication *self; static const gchar *developers[] = { "Emmanuele Bassi ", "Georges Basile Stavracas Neto ", "Isaque Galdino ", "Patrick Griffis ", "Jamie Murphy ", "Saiful B. Khan ", NULL }; static const gchar *designers[] = { "Allan Day ", "Jakub Steiner ", "Tobias Bernard ", NULL }; self = GTD_APPLICATION (user_data); adw_show_about_window (GTK_WINDOW (self->window), "application-name", _("Endeavour"), "application-icon", APPLICATION_ID, "version", GTD_VCS_TAG, "copyright", _("Copyright \xC2\xA9 2015–2022 The Endeavour authors"), "issue-url", "https://gitlab.gnome.org/World/Endeavour/-/issues", "website", "https://gitlab.gnome.org/World/Endeavour", "license-type", GTK_LICENSE_GPL_3_0, "developers", developers, "designers", designers, "translator-credits", _("translator-credits"), NULL); } static void gtd_application_quit (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GtdApplication *self = GTD_APPLICATION (user_data); gtk_window_destroy (self->window); } static void gtd_application_show_help (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GtdApplication *self = GTD_APPLICATION (user_data); gtk_show_uri (GTK_WINDOW (self->window) , "help:endeavour", GDK_CURRENT_TIME); } GtdApplication * gtd_application_new (void) { return g_object_new (GTD_TYPE_APPLICATION, "application-id", APPLICATION_ID, "flags", G_APPLICATION_HANDLES_COMMAND_LINE, "resource-base-path", "/org/gnome/todo", NULL); } static void set_accel_for_action (GtdApplication *self, const gchar *detailed_action_name, const gchar *accel) { const char *accels[] = { accel, NULL }; gtk_application_set_accels_for_action (GTK_APPLICATION (self), detailed_action_name, accels); } static void run_window (GtdApplication *self) { gtk_window_present (GTK_WINDOW (self->window)); } /* static void finish_initial_setup (GtdApplication *application) { g_return_if_fail (GTD_IS_APPLICATION (application)); run_window (application); gtd_manager_set_is_first_run (application->priv->manager, FALSE); g_clear_pointer (&application->priv->initial_setup, gtk_widget_destroy); } static void run_initial_setup (GtdApplication *application) { GtdApplicationPrivate *priv; g_return_if_fail (GTD_IS_APPLICATION (application)); priv = application->priv; if (!priv->initial_setup) { priv->initial_setup = gtd_initial_setup_window_new (application); g_signal_connect (priv->initial_setup, "cancel", G_CALLBACK (gtk_widget_destroy), application); g_signal_connect_swapped (priv->initial_setup, "done", G_CALLBACK (finish_initial_setup), application); } gtk_widget_show (priv->initial_setup); } */ static void gtd_application_finalize (GObject *object) { G_OBJECT_CLASS (gtd_application_parent_class)->finalize (object); } static void gtd_application_activate (GApplication *application) { GTD_ENTRY; /* FIXME: the initial setup is disabled for the 3.18 release because * we can't create tasklists on GOA accounts. */ run_window (GTD_APPLICATION (application)); GTD_EXIT; } static void gtd_application_startup (GApplication *application) { GtdApplication *self; GTD_ENTRY; self = GTD_APPLICATION (application); /* add actions */ g_action_map_add_action_entries (G_ACTION_MAP (self), gtd_application_entries, G_N_ELEMENTS (gtd_application_entries), self); set_accel_for_action (self, "app.quit", "q"); set_accel_for_action (self, "app.help", "F1"); G_APPLICATION_CLASS (gtd_application_parent_class)->startup (application); /* window */ gtk_window_set_default_icon_name (APPLICATION_ID); self->window = GTK_WINDOW (gtd_window_new (self)); /* Load the plugins */ gtd_manager_load_plugins (gtd_manager_get_default ()); GTD_EXIT; } static gint gtd_application_command_line (GApplication *app, GApplicationCommandLine *command_line) { GVariantDict *options; options = g_application_command_line_get_options_dict (command_line); if (g_variant_dict_contains (options, "quit")) { g_application_quit (app); return 0; } g_application_activate (app); return 0; } static gboolean gtd_application_local_command_line (GApplication *application, gchar ***arguments, gint *exit_status) { g_application_add_option_group (application, g_irepository_get_option_group()); return G_APPLICATION_CLASS (gtd_application_parent_class)->local_command_line (application, arguments, exit_status); } static gint gtd_application_handle_local_options (GApplication *application, GVariantDict *options) { if (g_variant_dict_contains (options, "debug")) gtd_log_init (); if (g_variant_dict_contains (options, "version")) { g_print ("%s - Version %s\n", g_get_application_name (), PACKAGE_VERSION); return 0; } return -1; } static void gtd_application_class_init (GtdApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GApplicationClass *application_class = G_APPLICATION_CLASS (klass); object_class->finalize = gtd_application_finalize; application_class->activate = gtd_application_activate; application_class->startup = gtd_application_startup; application_class->command_line = gtd_application_command_line; application_class->local_command_line = gtd_application_local_command_line; application_class->handle_local_options = gtd_application_handle_local_options; } static void gtd_application_init (GtdApplication *self) { g_application_add_main_option_entries (G_APPLICATION (self), cmd_options); }