diff options
Diffstat (limited to 'src/erable-application.c')
| -rw-r--r-- | src/erable-application.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/erable-application.c b/src/erable-application.c new file mode 100644 index 0000000..b13583a --- /dev/null +++ b/src/erable-application.c @@ -0,0 +1,120 @@ +/* erable-application.c + * + * Copyright 2023 Andrew Lee + * + * 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 <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "config.h" + +#include "erable-application.h" +#include "erable-window.h" + +struct _ErableApplication +{ + AdwApplication parent_instance; +}; + +G_DEFINE_TYPE (ErableApplication, erable_application, ADW_TYPE_APPLICATION) + +ErableApplication * +erable_application_new (const char *application_id, + GApplicationFlags flags) +{ + g_return_val_if_fail (application_id != NULL, NULL); + + return g_object_new (ERABLE_TYPE_APPLICATION, + "application-id", application_id, + "flags", flags, + NULL); +} + +static void +erable_application_activate (GApplication *app) +{ + GtkWindow *window; + + g_assert (ERABLE_IS_APPLICATION (app)); + + window = gtk_application_get_active_window (GTK_APPLICATION (app)); + + if (window == NULL) + window = g_object_new (ERABLE_TYPE_WINDOW, + "application", app, + NULL); + + gtk_window_present (window); +} + +static void +erable_application_class_init (ErableApplicationClass *klass) +{ + GApplicationClass *app_class = G_APPLICATION_CLASS (klass); + + app_class->activate = erable_application_activate; +} + +static void +erable_application_about_action (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + static const char *developers[] = {"Andrew Lee", NULL}; + ErableApplication *self = user_data; + GtkWindow *window = NULL; + + g_assert (ERABLE_IS_APPLICATION (self)); + + window = gtk_application_get_active_window (GTK_APPLICATION (self)); + + adw_show_about_window (window, + "application-name", "Erable", + "application-icon", "me.alee14.erable", + "developer-name", "Andrew Lee", + "version", "0.1.0", + "developers", developers, + "copyright", "© 2023 Andrew Lee\n\nThis application comes with absolutely no warranty. See the GNU General Public License, version 3 or later for details.", + NULL); +} + +static void +erable_application_quit_action (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + ErableApplication *self = user_data; + + g_assert (ERABLE_IS_APPLICATION (self)); + + g_application_quit (G_APPLICATION (self)); +} + +static const GActionEntry app_actions[] = { + { "quit", erable_application_quit_action }, + { "about", erable_application_about_action }, +}; + +static void +erable_application_init (ErableApplication *self) +{ + g_action_map_add_action_entries (G_ACTION_MAP (self), + app_actions, + G_N_ELEMENTS (app_actions), + self); + gtk_application_set_accels_for_action (GTK_APPLICATION (self), + "app.quit", + (const char *[]) { "<primary>q", NULL }); +} |
