From de1be0a956d49a82b67ec92741899fea7da60e3a Mon Sep 17 00:00:00 2001
From: rbuj <robert.buj@gmail.com>
Date: Fri, 22 Feb 2019 12:02:30 +0100
Subject: Use gresources for about_DATA, uimanager_DATA & builder_DATA

---
 configure.ac                 | 18 ++++++++++++++++++
 src/Makefile.am              | 37 ++++++++++++++++---------------------
 src/profile-editor.c         | 13 ++-----------
 src/skey-popup.c             |  2 +-
 src/terminal-accels.c        |  2 +-
 src/terminal-app.c           |  4 ++--
 src/terminal-encoding.c      |  2 +-
 src/terminal-search-dialog.c |  2 +-
 src/terminal-util.c          | 15 +++------------
 src/terminal-util.h          |  2 +-
 src/terminal-window.c        | 31 ++++++++++++++++---------------
 src/terminal.gresource.xml   | 30 ++++++++++++++++++++++++++++++
 12 files changed, 92 insertions(+), 66 deletions(-)
 create mode 100644 src/terminal.gresource.xml

diff --git a/configure.ac b/configure.ac
index 5692658..d974787 100644
--- a/configure.ac
+++ b/configure.ac
@@ -72,6 +72,24 @@ AC_SUBST([GLIB_GENMARSHAL])
 GLIB_MKENUMS="$($PKG_CONFIG --variable=glib_mkenums glib-2.0)"
 AC_SUBST([GLIB_MKENUMS])
 
+# **********************
+# GLIB_COMPILE_RESOURCES
+# **********************
+AC_ARG_VAR([GLIB_COMPILE_RESOURCES],[glib-compile-resources bin])
+AC_PATH_PROG([GLIB_COMPILE_RESOURCES],[glib-compile-resources],[])
+if test -z "$GLIB_COMPILE_RESOURCES"; then
+  AC_MSG_ERROR([glib-compile-resources not found])
+fi
+
+# *******
+# XMLLINT
+# *******
+AC_ARG_VAR([XMLLINT],[xmllint bin])
+AC_PATH_PROG([XMLLINT],[xmllint],[])
+if test -z "$XMLLINT"; then
+  AC_MSG_ERROR([xmllint not found])
+fi
+
 # *****
 # S/Key
 # *****
diff --git a/src/Makefile.am b/src/Makefile.am
index 8994e3a..938120c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -9,6 +9,8 @@ bin_PROGRAMS = mate-terminal
 BUILT_SOURCES = \
 	terminal-marshal.c \
 	terminal-marshal.h \
+	terminal-resources.c \
+	terminal-resources.h \
 	terminal-type-builtins.c \
 	terminal-type-builtins.h \
 	$(NULL)
@@ -64,6 +66,7 @@ nodist_mate_terminal_SOURCES= $(BUILT_SOURCES)
 
 mate_terminal_CPPFLAGS = \
 	-DTERMINAL_COMPILATION \
+	-DTERMINAL_RESOURCES_PATH_PREFIX="\"/org/mate/terminal\"" \
 	-DTERM_DATADIR="\"$(datadir)\"" \
 	-DTERM_LOCALEDIR="\"$(datadir)/locale\"" \
 	-DTERM_PKGDATADIR="\"$(pkgdatadir)\"" \
@@ -136,32 +139,14 @@ terminal-marshal.c: $(srcdir)/terminal-marshal.list
 		&& mv terminal-marshal.c.tmp terminal-marshal.c ) \
 	|| ( rm -f terminal-marshal.c.tmp && exit 1 )
 
+terminal-resources.h terminal-resources.c: terminal.gresource.xml Makefile $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir $(srcdir) $(srcdir)/terminal.gresource.xml)
+	$(AM_V_GEN) XMLLINT=$(XMLLINT) $(GLIB_COMPILE_RESOURCES) --target $@ --sourcedir $(srcdir) --generate --c-name terminal $<
+
 gsettingsschema_in_files = org.mate.terminal.gschema.xml.in
 gsettings_SCHEMAS = $(gsettingsschema_in_files:.xml.in=.xml)
 .PRECIOUS: $(gsettings_SCHEMAS)
 @INTLTOOL_XML_NOMERGE_RULE@
 
-aboutdir = $(pkgdatadir)
-about_DATA = \
-	terminal.about \
-	$(NULL)
-
-uimanagerdir = $(pkgdatadir)
-uimanager_DATA = \
-	terminal.xml \
-	$(NULL)
-
-builderdir = $(pkgdatadir)
-builder_DATA = \
-	encodings-dialog.ui \
-	find-dialog.ui \
-	keybinding-editor.ui \
-	profile-manager.ui \
-	profile-new-dialog.ui \
-	profile-preferences.ui \
-	skey-challenge.ui \
-	$(NULL)
-
 CLEANFILES = \
 	stamp-terminal-type-builtins.h \
 	mate-terminal.schemas \
@@ -170,6 +155,16 @@ CLEANFILES = \
 	$(BUILT_SOURCES)
 
 EXTRA_DIST = \
+	encodings-dialog.ui \
+	find-dialog.ui \
+	keybinding-editor.ui \
+	profile-manager.ui \
+	profile-new-dialog.ui \
+	profile-preferences.ui \
+	skey-challenge.ui \
+	terminal.about \
+	terminal.xml \
+	terminal.gresource.xml \
 	terminal-marshal.list \
 	terminal-type-builtins.c.template \
 	terminal-type-builtins.h.template \
diff --git a/src/profile-editor.c b/src/profile-editor.c
index 3b41ddd..fc13235 100644
--- a/src/profile-editor.c
+++ b/src/profile-editor.c
@@ -660,7 +660,6 @@ terminal_profile_edit (TerminalProfile *profile,
                        GtkWindow       *transient_parent,
                        const char      *widget_name)
 {
-	char *path;
 	GtkBuilder *builder;
 	GError *error = NULL;
 	GtkWidget *editor, *w;
@@ -677,17 +676,9 @@ terminal_profile_edit (TerminalProfile *profile,
 		return;
 	}
 
-	path = g_build_filename (TERM_PKGDATADIR, "profile-preferences.ui", NULL);
 	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, path, &error))
-	{
-		g_warning ("Failed to load %s: %s\n", path, error->message);
-		g_error_free (error);
-		g_free (path);
-		g_object_unref (builder);
-		return;
-	}
-	g_free (path);
+	gtk_builder_add_from_resource (builder, TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/profile-preferences.ui", &error);
+	g_assert_no_error (error);
 
 	editor = (GtkWidget *) gtk_builder_get_object  (builder, "profile-editor-dialog");
 	g_object_set_data_full (G_OBJECT (editor), "builder",
diff --git a/src/skey-popup.c b/src/skey-popup.c
index efc2f70..7209cf6 100644
--- a/src/skey-popup.c
+++ b/src/skey-popup.c
@@ -180,7 +180,7 @@ terminal_skey_do_popup (GtkWindow *window,
 		}
 	}
 
-	if (!terminal_util_load_builder_file ("skey-challenge.ui",
+	if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/skey-challenge.ui",
 	                                      "skey-dialog", &dialog,
 	                                      "skey-entry", &entry,
 	                                      "text-label", &label,
diff --git a/src/terminal-accels.c b/src/terminal-accels.c
index 3c6b106..1445230 100644
--- a/src/terminal-accels.c
+++ b/src/terminal-accels.c
@@ -992,7 +992,7 @@ terminal_edit_keys_dialog_show (GtkWindow *transient_parent)
 	if (edit_keys_dialog != NULL)
 		goto done;
 
-	if (!terminal_util_load_builder_file ("keybinding-editor.ui",
+	if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/keybinding-editor.ui",
 	                                      "keybindings-dialog", &dialog,
 	                                      "disable-mnemonics-checkbutton", &disable_mnemonics_button,
 	                                      "disable-menu-accel-checkbutton", &disable_menu_accel_button,
diff --git a/src/terminal-app.c b/src/terminal-app.c
index ea47400..5e5989c 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -1229,7 +1229,7 @@ terminal_app_new_profile (TerminalApp     *app,
 	{
 		GtkWidget *create_button, *grid, *name_label, *name_entry, *base_label, *combo;
 
-		if (!terminal_util_load_builder_file ("profile-new-dialog.ui",
+		if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/profile-new-dialog.ui",
 		                                      "new-profile-dialog", &app->new_profile_dialog,
 		                                      "new-profile-create-button", &create_button,
 		                                      "new-profile-grid", &grid,
@@ -1332,7 +1332,7 @@ terminal_app_manage_profiles (TerminalApp     *app,
 		return;
 	}
 
-	if (!terminal_util_load_builder_file ("profile-manager.ui",
+	if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/profile-manager.ui",
 	                                      "profile-manager", &dialog,
 	                                      "profiles-treeview-container", &tree_view_container,
 	                                      "new-profile-button", &new_button,
diff --git a/src/terminal-encoding.c b/src/terminal-encoding.c
index 9ca8310..d24972c 100644
--- a/src/terminal-encoding.c
+++ b/src/terminal-encoding.c
@@ -474,7 +474,7 @@ terminal_encoding_dialog_show (GtkWindow *transient_parent)
 
 	data = g_new (EncodingDialogData, 1);
 
-	if (!terminal_util_load_builder_file ("encodings-dialog.ui",
+	if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/encodings-dialog.ui",
 	                                      "encodings-dialog", &data->dialog,
 	                                      "add-button", &data->add_button,
 	                                      "remove-button", &data->remove_button,
diff --git a/src/terminal-search-dialog.c b/src/terminal-search-dialog.c
index aa595e7..7ff80e8 100644
--- a/src/terminal-search-dialog.c
+++ b/src/terminal-search-dialog.c
@@ -83,7 +83,7 @@ terminal_search_dialog_new (GtkWindow   *parent)
 
 	priv = g_new0 (TerminalSearchDialogPrivate, 1);
 
-	if (!terminal_util_load_builder_file ("find-dialog.ui",
+	if (!terminal_util_load_builder_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/find-dialog.ui",
 	                                      "find-dialog", &dialog,
 	                                      "search-label", &priv->search_label,
 	                                      "search-entry", &priv->search_entry,
diff --git a/src/terminal-util.c b/src/terminal-util.c
index 3c7cb3b..1ffb629 100644
--- a/src/terminal-util.c
+++ b/src/terminal-util.c
@@ -339,26 +339,17 @@ terminal_util_get_licence_text (void)
 }
 
 gboolean
-terminal_util_load_builder_file (const char *filename,
+terminal_util_load_builder_resource (const char *path,
                                  const char *object_name,
                                  ...)
 {
-	char *path;
 	GtkBuilder *builder;
 	GError *error = NULL;
 	va_list args;
 
-	path = g_build_filename (TERM_PKGDATADIR, filename, NULL);
 	builder = gtk_builder_new ();
-	if (!gtk_builder_add_from_file (builder, path, &error))
-	{
-		g_warning ("Failed to load %s: %s\n", filename, error->message);
-		g_error_free (error);
-		g_free (path);
-		g_object_unref (builder);
-		return FALSE;
-	}
-	g_free (path);
+	gtk_builder_add_from_resource (builder, path, &error);
+	g_assert_no_error (error);
 
 	va_start (args, object_name);
 
diff --git a/src/terminal-util.h b/src/terminal-util.h
index 321418b..97b9459 100644
--- a/src/terminal-util.h
+++ b/src/terminal-util.h
@@ -63,7 +63,7 @@ char *terminal_util_concat_uris (char **uris,
 
 char *terminal_util_get_licence_text (void);
 
-gboolean terminal_util_load_builder_file (const char *filename,
+gboolean terminal_util_load_builder_resource (const char *path,
         const char *object_name,
         ...);
 
diff --git a/src/terminal-window.c b/src/terminal-window.c
index b5f5e5f..df6347c 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -2237,14 +2237,10 @@ terminal_window_init (TerminalWindow *window)
 
     /* Load the UI */
     error = NULL;
-    priv->ui_id = gtk_ui_manager_add_ui_from_file (manager,
-                  TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.xml",
+    priv->ui_id = gtk_ui_manager_add_ui_from_resource (manager,
+                  TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/terminal.xml",
                   &error);
-    if (error)
-    {
-        g_printerr ("Failed to load UI: %s\n", error->message);
-        g_error_free (error);
-    }
+    g_assert_no_error (error);
 
     priv->menubar = gtk_ui_manager_get_widget (manager, "/menubar");
     gtk_box_pack_start (GTK_BOX (priv->main_vbox),
@@ -4342,26 +4338,31 @@ help_about_callback (GtkAction *action,
         "Copyright © 2011 Perberos\n"
         "Copyright © 2012-2019 MATE developers";
     char *licence_text;
+    GBytes *bytes;
+    const guint8 *data;
     GKeyFile *key_file;
     GError *error = NULL;
     char **authors, **contributors, **artists, **documenters, **array_strv;
-    gsize n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i;
+    gsize data_len, n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i;
     GPtrArray *array;
 
+
+    bytes = g_resources_lookup_data (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/terminal.about",
+                                     G_RESOURCE_LOOKUP_FLAGS_NONE,
+                                     &error);
+    g_assert_no_error (error);
+
+    data = g_bytes_get_data (bytes, &data_len);
     key_file = g_key_file_new ();
-    if (!g_key_file_load_from_file (key_file, TERM_PKGDATADIR G_DIR_SEPARATOR_S "terminal.about", 0, &error))
-    {
-        g_warning ("Couldn't load about data: %s\n", error->message);
-        g_error_free (error);
-        g_key_file_free (key_file);
-        return;
-    }
+    g_key_file_load_from_data (key_file, (const char *) data, data_len, 0, &error);
+    g_assert_no_error (error);
 
     authors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Authors", &n_authors, NULL);
     contributors = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Contributors", &n_contributors, NULL);
     artists = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Artists", &n_artists, NULL);
     documenters = g_key_file_get_string_list (key_file, ABOUT_GROUP, "Documenters", &n_documenters, NULL);
     g_key_file_free (key_file);
+    g_bytes_unref (bytes);
 
     array = g_ptr_array_new ();
 
diff --git a/src/terminal.gresource.xml b/src/terminal.gresource.xml
new file mode 100644
index 0000000..e8ff1f1
--- /dev/null
+++ b/src/terminal.gresource.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    This file is part of MATE Terminal.
+
+    MATE Terminal is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    MATE Terminal is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with MATE Terminal.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<gresources>
+  <gresource prefix="/org/mate/terminal/ui">
+    <file compressed="true" preprocess="xml-stripblanks">encodings-dialog.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">find-dialog.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">keybinding-editor.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">profile-manager.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">profile-new-dialog.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">profile-preferences.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">skey-challenge.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">terminal.xml</file>
+    <file compressed="true">terminal.about</file>
+  </gresource>
+</gresources>
-- 
cgit v1.2.1