diff --git a/src/gui.cpp b/src/gui.cpp index 898093d..6d185c0 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -1,3 +1,5 @@ +#include +#include #include "config.h" #include "jack.h" #include "portmanager.h" @@ -5,6 +7,8 @@ #include "session_gui.h" #include "preferences_gui.h" +#define PACKAGE_NAME "jsweeper" + Glib::RefPtr g_builder; Gui::Gui(BaseObjectType *cobject, const Glib::RefPtr &builder) @@ -107,10 +111,35 @@ void Gui::SetPortTypeSeparation() } } +static void TryLoad(const char *filename) +{ + struct stat out; + if (stat(filename, &out) == 0) { + g_builder = Gtk::Builder::create_from_file(filename); + } +} + Gui *Gui::Open() { if (g_builder == NULL) { - g_builder = Gtk::Builder::create_from_file("jsweeper.ui"); + const char * const *dirs = g_get_system_data_dirs(); + + while (*dirs != NULL && g_builder == NULL) { + std::string path = *dirs; + path = Glib::build_filename(path, PACKAGE_NAME); + path = Glib::build_filename(path, "jsweeper.ui"); + + TryLoad(path.c_str()); + + dirs++; + } + + if (g_builder == NULL) TryLoad("jsweeper.ui"); + + if (g_builder == NULL) { + std::cerr << "Failed to load jsweeper.ui!" << std::endl; + exit(-1); + } } Gui *window = NULL;