From 14608d80659b62f7dbab89bf9a0c98842bb4d6cc Mon Sep 17 00:00:00 2001 From: petern Date: Mon, 4 Jan 2010 10:27:37 +0000 Subject: [PATCH] Check data dirs for ui file. git-svn-id: file:///home/vcs/svn/jsweeper/trunk@36 6611ac79-6612-48ef-a1e9-b906f853523e --- src/gui.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) 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;