[virt-tools-list] [PATCH virt-viewer] Load ui files first from installed location
Jonathon Jongsma
jjongsma at redhat.com
Thu Jan 16 18:36:15 UTC 2014
virt_viewer_util_load_ui() looks first in the current directory, and then looks
in the system data dirs for a ui file to load, but if you install virt-viewer in
a different prefix, it will load the system UI file rather than the one from the
install prefix. Try to load the ui file from pkgdatadir first.
---
src/Makefile.am | 2 ++
src/virt-viewer-util.c | 28 +++++++++++++++++-----------
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 12f71f3..b3a9637 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -135,6 +135,8 @@ if OS_WIN32
remote_viewer_LDFLAGS += -Wl,--subsystem,windows
endif
+AM_CPPFLAGS = -DPACKAGE_DATADIR=\""$(pkgdatadir)"\"
+
VIRT_VIEWER_RES = virt-viewer.rc virt-viewer.manifest
ICONDIR = $(top_builddir)/icons
MANIFESTDIR = $(srcdir)
diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c
index e4db928..9deddad 100644
--- a/src/virt-viewer-util.c
+++ b/src/virt-viewer-util.c
@@ -57,20 +57,26 @@ GtkBuilder *virt_viewer_util_load_ui(const char *name)
if (stat(name, &sb) >= 0) {
gtk_builder_add_from_file(builder, name, &error);
} else {
- 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) {
+ gchar *path = g_build_filename(PACKAGE_DATADIR, "ui", name, NULL);
+ gboolean success = (gtk_builder_add_from_file(builder, path, NULL) != 0);
+ g_free(path);
+
+ if (!success) {
+ const gchar * const * dirs = g_get_system_data_dirs();
+ g_return_val_if_fail(dirs != NULL, NULL);
+
+ while (dirs[0] != NULL) {
+ 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);
- break;
+ dirs++;
}
- g_free(path);
- dirs++;
+ if (dirs[0] == NULL)
+ goto failed;
}
- if (dirs[0] == NULL)
- goto failed;
}
if (error) {
--
1.8.4.2
More information about the virt-tools-list
mailing list