practice-timer/TimerApplication.c

89 lines
3.1 KiB
C

#include "TimerApplication.h"
#include "TimerMainWindow.h"
#include <sys/stat.h>
#define TIMER_CONFIG_FILE_NAME "settings.conf"
#define TIMER_DEFAULT_DATA_FILE_NAME "data.json"
typedef struct {
gboolean versionSwitch;
} TimerOptions;
struct _TimerApplication {
GtkApplication parent;
char *configDir;
char *configFile;
char *defaultDataFile;
TimerOptions options;
};
G_DEFINE_TYPE(TimerApplication, timer_application, GTK_TYPE_APPLICATION);
static void timer_application_add_options(TimerApplication *app) {
const GOptionEntry entries[] = {
{
.long_name = "version",
.short_name = 'v',
.flags = G_OPTION_FLAG_NONE,
.arg = G_OPTION_ARG_NONE,
.arg_data = &(app->options.versionSwitch),
.description = "Print the version and then exit",
.arg_description = NULL
},
{NULL}
};
g_application_add_main_option_entries(G_APPLICATION(app), entries);
}
static void timer_application_check_command_line_options(TimerApplication *self) {
if (self->options.versionSwitch) {
printf("%s\n", APPLICATION_VERSION);
exit(EXIT_SUCCESS);
}
}
static void timer_application_activate(GApplication *app) {
timer_application_check_command_line_options(TIMER_APPLICATION(app));
if (g_mkdir_with_parents(TIMER_APPLICATION(app)->configDir, 0700) != 0) {
GtkWidget *msgDiag = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Could not create config dir: %s", strerror(errno));
gtk_window_set_position(GTK_WINDOW(msgDiag), GTK_WIN_POS_MOUSE);
gtk_dialog_run(GTK_DIALOG(msgDiag));
gtk_widget_destroy(msgDiag);
}
TimerMainWindow *win = timer_main_window_new(TIMER_APPLICATION(app));
timer_main_window_show_for_mode(win);
}
TimerApplication *timer_application_new() {
return g_object_new(TIMER_TYPE_APPLICATION, "application-id", "org.zander.practicetiemr", "flags", G_APPLICATION_DEFAULT_FLAGS, NULL);
}
const char *timer_application_get_config_file(TimerApplication *self) {
return self->configFile;
}
const char *timer_application_get_default_data_file(TimerApplication *self) {
return self->defaultDataFile;
}
static void timer_application_finalize(GObject *self) {
g_free(TIMER_APPLICATION(self)->configFile);
g_free(TIMER_APPLICATION(self)->configDir);
g_free(TIMER_APPLICATION(self)->defaultDataFile);
G_OBJECT_CLASS(timer_application_parent_class)->finalize(self);
}
static void timer_application_class_init(TimerApplicationClass *class) {
G_OBJECT_CLASS(class)->finalize = timer_application_finalize;
G_APPLICATION_CLASS(class)->activate = timer_application_activate;
}
static void timer_application_init(TimerApplication *self) {
self->configFile = g_strdup_printf("%s/practicetimer/%s", g_get_user_config_dir(), TIMER_CONFIG_FILE_NAME);
self->configDir = g_strdup_printf("%s/practicetimer", g_get_user_config_dir());
self->defaultDataFile = g_strdup_printf("%s/practicetimer/%s", g_get_user_config_dir(), TIMER_DEFAULT_DATA_FILE_NAME);
timer_application_add_options(self);
}