X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=player%2Futil.c;fp=player%2Futil.c;h=5cd15980384b3ec8ee518c68cc172d5308d46ef5;hb=84814759ceb7dc7a97a3a73b6e365a5ca67d4ef8;hp=0000000000000000000000000000000000000000;hpb=32ba95a539a77d1dd2b94d19e83024c40d9c10c7;p=projects%2Fchimara%2Fchimara.git diff --git a/player/util.c b/player/util.c new file mode 100644 index 0000000..5cd1598 --- /dev/null +++ b/player/util.c @@ -0,0 +1,76 @@ +#include +#include +#include "util.h" +#include "error.h" + +const char * +get_data_file_path(const char *filename) +{ + char *path = g_build_filename(PACKAGE_DATA_DIR, filename); + if(g_file_test(path, G_FILE_TEST_EXISTS)) + return path; +#ifdef DEBUG + g_free(path); + path = g_build_filename(PACKAGE_SRC_DIR, filename); + if(g_file_test(path, G_FILE_TEST_EXISTS)) + return path; +#endif /* DEBUG */ + g_error("Could not find data file: %s", filename); +} + +GtkBuilder * +new_builder_with_objects(char **object_ids) +{ + GError *error = NULL; + GtkBuilder *builder = gtk_builder_new(); + + if( !gtk_builder_add_objects_from_file(builder, PACKAGE_DATA_DIR "/chimara.ui", object_ids, &error) ) { +#ifdef DEBUG + g_error_free(error); + error = NULL; + if( !gtk_builder_add_objects_from_file(builder, PACKAGE_SRC_DIR "/chimara.ui", object_ids, &error) ) +#endif /* DEBUG */ + goto fail; + } + return builder; + +fail: + error_dialog(NULL, error, _("Error while building interface: ")); + return NULL; +} + +GObject * +load_object(GtkBuilder *builder, const char *name) +{ + GObject *retval; + if( (retval = gtk_builder_get_object(builder, name)) == NULL) { + error_dialog(NULL, NULL, "Error while getting object '%s'", name); + g_error("Error while getting object '%s'", name); + } + return retval; +} + +GtkUIManager * +new_ui_manager(const char *filename) +{ + GError *error = NULL; + GtkUIManager *uimanager = gtk_ui_manager_new(); + char *path = g_build_filename(PACKAGE_DATA_DIR, filename, NULL); + + if( !gtk_ui_manager_add_ui_from_file(uimanager, path, &error) ) { +#ifdef DEBUG + g_free(path); + path = g_build_filename(PACKAGE_SRC_DIR, filename, NULL); + g_error_free(error); + error = NULL; + if( !gtk_ui_manager_add_ui_from_file(uimanager, path, &error) ) +#endif /* DEBUG */ + goto fail; + } + return uimanager; + +fail: + error_dialog(NULL, error, _("Error while building interface: ")); + return NULL; +} +