ocarina/gui/ocarina.c

93 lines
2.2 KiB
C

/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <core/core.h>
#include <gui/audio.h>
#include <gui/builder.h>
#include <gui/collection.h>
#include <gui/idle.h>
#include <gui/playlist.h>
#include <gui/settings.h>
#include <gui/sidebar.h>
#include <gui/tempq.h>
#include <gui/view.h>
#include <gui/window.h>
#define OCARINA_FLAGS (G_APPLICATION_FLAGS_NONE)
#ifndef CONFIG_DEBUG
const static gchar *OCARINA_NAME = "org.gtk.ocarina";
#else
const static gchar *OCARINA_NAME = "org.gtk.ocarina-debug";
#endif
struct core_init_data init_data = {
&playlist_ops,
&tempq_ops,
&audio_ops,
};
static int startup_argc;
static char **startup_argv;
static gchar *find_file_path(const gchar *file)
{
gchar *path = g_strjoin("/", "share", "ocarina", file, NULL);
if (g_file_test(path, G_FILE_TEST_IS_REGULAR))
return path;
g_free(path);
return g_strjoin("/", "/usr", "share", "ocarina", file, NULL);
}
static void __ocarina_activate(GApplication *application, gpointer data)
{
gtk_application_add_window(GTK_APPLICATION(application),
GTK_WINDOW(gui_builder_widget("o_window")));
}
static void __ocarina_startup(GApplication *application, gpointer data)
{
gchar *ui = find_file_path("ocarina6.glade");
gchar *icon = find_file_path("ocarina.png");
gui_builder_init(ui);
core_init(&startup_argc, &startup_argv, &init_data);
gui_settings_init();
gui_view_init();
gui_window_init(icon);
gui_sidebar_init();
gui_collection_init();
gui_playlist_init();
gui_audio_init();
gui_idle_enable();
g_free(ui);
g_free(icon);
}
static void __ocarina_shutdown(GApplication *application, gpointer data)
{
gui_idle_disable();
core_deinit();
gui_window_deinit();
gui_settings_deinit();
gui_builder_deinit();
}
int main(int argc, char **argv)
{
GtkApplication *ocarina = gtk_application_new(OCARINA_NAME, OCARINA_FLAGS);
startup_argc = argc;
startup_argv = argv;
g_signal_connect(G_APPLICATION(ocarina), "activate", (GCallback)__ocarina_activate, NULL);
g_signal_connect(G_APPLICATION(ocarina), "startup", (GCallback)__ocarina_startup, NULL);
g_signal_connect(G_APPLICATION(ocarina), "shutdown", (GCallback)__ocarina_shutdown, NULL);
return g_application_run(G_APPLICATION(ocarina), argc, argv);
}