/* * Copyright 2014 (c) Anna Schumaker. */ extern "C" { #include #include #include #include #include #include #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 { 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_builder_init(gui :: share_file("ocarina6.glade").c_str()); core_init(&argc, &argv, &init_data); gui_settings_init(); gui_window_init(gui :: share_file("ocarina.png").c_str()); gui_sidebar_init(); gui_audio_init(); plist :: init(); manager :: init(); init_tabs(); post_init_tabs(); window = Glib :: wrap(GTK_WINDOW(gui_builder_widget("o_window")), false); ocarina_app->signal_window_removed().connect(sigc::ptr_fun(on_window_removed)); ocarina_app->run(*window, argc, argv); core_deinit(); cleanup_tabs(); gui_window_deinit(); gui_settings_deinit(); //gui_builder_deinit(); return 0; }