Avoid duplicating code
[projects/chimara/chimara.git] / player / util.c
1 #include <gtk/gtk.h>
2 #include <config.h>
3 #include "util.h"
4 #include "error.h"
5
6 const char *
7 get_data_file_path(const char *filename)
8 {
9         char *path = g_build_filename(PACKAGE_DATA_DIR, filename);
10         if(g_file_test(path, G_FILE_TEST_EXISTS))
11                 return path;
12 #ifdef DEBUG
13         g_free(path);
14         path = g_build_filename(PACKAGE_SRC_DIR, filename);
15         if(g_file_test(path, G_FILE_TEST_EXISTS))
16                 return path;
17 #endif /* DEBUG */
18         g_error("Could not find data file: %s", filename);
19 }
20
21 GtkBuilder *
22 new_builder_with_objects(char **object_ids)
23 {
24         GError *error = NULL;
25         GtkBuilder *builder = gtk_builder_new();
26         
27         if( !gtk_builder_add_objects_from_file(builder, PACKAGE_DATA_DIR "/chimara.ui", object_ids, &error) ) {
28 #ifdef DEBUG
29                 g_error_free(error);
30                 error = NULL;
31                 if( !gtk_builder_add_objects_from_file(builder, PACKAGE_SRC_DIR "/chimara.ui", object_ids, &error) )
32 #endif /* DEBUG */
33                         goto fail;
34         }
35         return builder;
36
37 fail:
38         error_dialog(NULL, error, _("Error while building interface: "));
39         return NULL;
40 }
41
42 GObject *
43 load_object(GtkBuilder *builder, const char *name)
44 {
45         GObject *retval;
46         if( (retval = gtk_builder_get_object(builder, name)) == NULL) {
47                 error_dialog(NULL, NULL, "Error while getting object '%s'", name);
48                 g_error("Error while getting object '%s'", name);
49         }
50         return retval;
51 }
52
53 GtkUIManager *
54 new_ui_manager(const char *filename)
55 {
56         GError *error = NULL;
57         GtkUIManager *uimanager = gtk_ui_manager_new();
58         char *path = g_build_filename(PACKAGE_DATA_DIR, filename, NULL);
59         
60         if( !gtk_ui_manager_add_ui_from_file(uimanager, path, &error) ) {
61 #ifdef DEBUG
62                 g_free(path);
63                 path = g_build_filename(PACKAGE_SRC_DIR, filename, NULL);
64                 g_error_free(error);
65                 error = NULL;
66                 if( !gtk_ui_manager_add_ui_from_file(uimanager, path, &error) )
67 #endif /* DEBUG */
68                         goto fail;
69         }
70         return uimanager;
71
72 fail:
73         error_dialog(NULL, error, _("Error while building interface: "));
74         return NULL;
75 }
76