ocarina/gui/ocarina.cpp

83 lines
1.5 KiB
C++

/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <core/core.h>
extern "C" {
#include <core/idle.h>
}
#include <gui/ocarina.h>
#include <gui/tabs.h>
static std::string ocarina_dir = "";
static Glib::RefPtr<Gtk::Application> ocarina_app;
struct core_init_data init_data = {
&collection_ops,
&history_ops,
&playlist_ops,
&tempq_ops,
&audio_ops,
};
namespace gui
{
Glib::RefPtr<Gtk::Builder> __O_BUILDER;
const std::string share_file(const std::string &f)
{
return ocarina_dir + f;
}
}
static void setup_share(const std::string &path)
{
char buf[1024];
ssize_t len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
if (len == -1)
return;
buf[len] = '\0';
ocarina_dir = std::string(buf);
ocarina_dir = ocarina_dir.substr(0, ocarina_dir.size() - 11);
ocarina_dir = ocarina_dir + "share/ocarina/";
}
static void on_window_removed(Gtk::Window *window)
{
idle_cancel();
}
int main(int argc, char **argv)
{
Gtk::Window *window;
setup_share(argv[0]);
ocarina_app = Gtk::Application::create(argc, argv, "org.gtkmm.ocarina");
gui :: __O_BUILDER = Gtk::Builder::create();
if (!gui::__O_BUILDER->add_from_file(gui::share_file("ocarina6.glade")))
exit(1);
gst :: init_pre();
core :: init(&argc, &argv, &init_data);
gst :: init();
plist :: init();
manager :: init();
init_tabs();
window = window_init();
post_init_tabs();
ocarina_app->signal_window_removed().connect(sigc::ptr_fun(on_window_removed));
ocarina_app->run(*window, argc, argv);
core :: deinit();
cleanup_tabs();
gst :: quit();
return 0;
}