From 1002a220a4e6b7083d0a9bc7dbef64799ae5b496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Tue, 19 Jul 2011 19:18:50 +0200 Subject: [PATCH] Lookup UI file correctly, to fix Windows support --- src/Makefile.am | 1 - src/virt-viewer-util.c | 26 ++++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 7e7a9c3..97382e5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,5 +52,4 @@ virt_viewer_CFLAGS = \ @LIBXML2_CFLAGS@ \ @LIBVIRT_CFLAGS@ \ @WARN_CFLAGS@ \ - -DBUILDER_XML_DIR="\"$(builderxmldir)\"" \ -DLOCALE_DIR=\""$(datadir)/locale"\" diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c index 4be50d7..f5c1a5b 100644 --- a/src/virt-viewer-util.c +++ b/src/virt-viewer-util.c @@ -42,16 +42,34 @@ GtkBuilder *virt_viewer_util_load_ui(const char *name) if (stat(name, &sb) >= 0) { gtk_builder_add_from_file(builder, name, &error); } else { - gchar *path = g_strdup_printf("%s/%s", BUILDER_XML_DIR, name); - gtk_builder_add_from_file(builder, path, &error); - g_free(path); + const gchar * const * dirs = g_get_system_data_dirs(); + g_return_val_if_fail(dirs != NULL, NULL); + + while (dirs[0] != NULL) { + gchar *path = g_build_filename(dirs[0], PACKAGE, "ui", name, NULL); + if (gtk_builder_add_from_file(builder, path, NULL) != 0) { + g_free(path); + break; + } + g_free(path); + dirs++; + } + if (dirs[0] == NULL) + goto failed; } - if (error) + if (error) { g_error("Cannot load UI description %s: %s", name, error->message); + g_clear_error(&error); + goto failed; + } return builder; +failed: + g_error("failed to find UI description file"); + g_object_unref(builder); + return NULL; } int