/* * Copyright 2014 (c) Anna Schumaker. */ #include extern "C" { #include } #include #include static std::string ocarina_dir = ""; static Glib::RefPtr ocarina_app; struct core_init_data init_data = { &collection_ops, &history_ops, &playlist_ops, &tempq_ops, &audio_ops, }; namespace gui { Glib::RefPtr __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(); return 0; }