[virt-tools-list] [virt-viewer 2/2] util: allow loading an in-tree ui file

Fabiano Fidêncio fidencio at redhat.com
Thu Feb 25 07:21:01 UTC 2016


This commits allows to load ui files without the need to install
virt-viewer. It helps a lot developers testing changes in the ui files
and also avoid crashes like [0] when running remote-viewer in tree
without any previous installation of virt-viewer.

[0]:
fidenci at cat ~/src/upstream/virt-viewer $ ./src/remote-viewer

(remote-viewer:29951): virt-viewer-ERROR **: failed to find UI
description file
Trace/breakpoint trap (core dumped)

Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
 src/Makefile.am        |  2 +-
 src/virt-viewer-util.c | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 171a141..ac7177d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -187,7 +187,7 @@ if OS_WIN32
 remote_viewer_LDFLAGS += -Wl,--subsystem,windows
 endif
 
-AM_CPPFLAGS = -DPACKAGE_DATADIR=\""$(pkgdatadir)"\"
+AM_CPPFLAGS = -DPACKAGE_DATADIR=\""$(pkgdatadir)"\" -DSOURCE_DIR=\""$(abs_srcdir)"\"
 
 VIRT_VIEWER_RES = virt-viewer.rc virt-viewer.manifest
 ICONDIR = $(top_builddir)/icons
diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c
index 6fe6c04..d82b97f 100644
--- a/src/virt-viewer-util.c
+++ b/src/virt-viewer-util.c
@@ -65,19 +65,42 @@ virt_viewer_util_try_to_load_ui_from_system_data_dirs(GtkBuilder *builder, const
     return success;
 }
 
-static gboolean
-virt_viewer_util_try_to_load_ui_from_non_system_data_dirs(GtkBuilder *builder, const gchar *name, GError **error)
+static void
+virt_viewer_util_check_for_g_file_error_noent(const gchar *path, GError **error)
 {
-    gchar *path = g_build_filename(PACKAGE_DATADIR, "ui", name, NULL);
-    gboolean success = (gtk_builder_add_from_file(builder, path, error) != 0);
-
     if (*error != NULL) {
         if (!((*error)->domain == G_FILE_ERROR && (*error)->code == G_FILE_ERROR_NOENT))
             g_warning("Failed to add ui file '%s': %s", path, (*error)->message);
         g_clear_error(error);
     }
+}
+
+static gboolean
+virt_viewer_util_try_to_load_ui_from_non_system_data_dirs(GtkBuilder *builder, const gchar *name, GError **error)
+{
+    gchar *path;
+    gboolean success;
+
+    /*
+     * Firstly, try to load the ui file from the $srcdir.
+     * It allows developers to test changes done in the ui file without
+     * installing virt-viewer.
+     */
+    path = g_build_filename(SOURCE_DIR, name, NULL);
+    success = (gtk_builder_add_from_file(builder, path, error) != 0);
+    virt_viewer_util_check_for_g_file_error_noent(path, error);
     g_free(path);
 
+    if (!success) {
+        /*
+         * And only then try to load the ui file from the $pkgdatadir.
+         */
+        path = g_build_filename(PACKAGE_DATADIR, "ui", name, NULL);
+        success = (gtk_builder_add_from_file(builder, path, error) != 0);
+        virt_viewer_util_check_for_g_file_error_noent(path, error);
+        g_free(path);
+    }
+
     return success;
 }
 
-- 
2.5.0




More information about the virt-tools-list mailing list