From 6d164b4f423ddba1f5433e078bbfc4a8e6f514bf Mon Sep 17 00:00:00 2001
From: raveit65 <mate@raveit.de>
Date: Mon, 23 Jul 2018 19:29:24 +0200
Subject: Initial GResource migration

Embedding UI data files as GResource makes several things easier.
The compiled resources need to be linked directly with the binary
as they won't be available if linked with the embedded libeom.

Starting with eom.css and eom-ui.xml

inspired from:
https://gitlab.gnome.org/GNOME/eog/commit/94004b4
---
 configure.ac          |  1 +
 data/Makefile.am      | 14 +++++---------
 src/Makefile.am       | 10 +++++++++-
 src/eom-window.c      |  6 +++---
 src/eom.gresource.xml | 10 ++++++++++
 src/main.c            |  8 +++++---
 6 files changed, 33 insertions(+), 16 deletions(-)
 create mode 100644 src/eom.gresource.xml

diff --git a/configure.ac b/configure.ac
index 99b0140..6f854d4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,6 +37,7 @@ AC_PROG_LIBTOOL
 
 AC_PROG_CC
 AM_PROG_CC_C_O
+AC_PATH_PROG([GLIB_COMPILE_RESOURCES], [glib-compile-resources])
 AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
 AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
 
diff --git a/data/Makefile.am b/data/Makefile.am
index 10b7dd6..2d81162 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -25,21 +25,17 @@ ui_DATA = \
 	eom-image-properties-dialog.ui \
 	eom-multiple-save-as-dialog.ui \
 	eom-preferences-dialog.ui \
-	eom-ui.xml \
 	eom-toolbar.xml
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = eom.pc
 
-themedir = $(pkgdatadir)
-theme_DATA = \
-        eom.css
-
 EXTRA_DIST = \
-        $(theme_DATA) \
-        $(ui_DATA) \
-        $(DESKTOP_IN_FILES) \
-        $(appdata_in_files)
+	$(ui_DATA) \
+	eom.css			\
+	eom-ui.xml		\
+	$(DESKTOP_IN_FILES) \
+	$(appdata_in_files)
 
 CLEANFILES = \
         $(appdata_DATA)
diff --git a/src/Makefile.am b/src/Makefile.am
index 753505a..13f890a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -157,7 +157,9 @@ libeom_la_LIBADD += \
 	$(X11_LIBS)
 endif
 
-eom_SOURCES = main.c
+eom_SOURCES = \
+	main.c \
+	eom-resources.c
 
 eom_CFLAGS = 							\
 	-I$(top_srcdir)/cut-n-paste/toolbar-editor		\
@@ -177,8 +179,13 @@ eom_LDADD = 				\
 BUILT_SOURCES = 			\
 	eom-enum-types.c		\
 	eom-enum-types.h		\
+	eom-resources.c			\
 	$(MARSHAL_OUTPUT)
 
+eom-resources.c: eom.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(top_srcdir)/data --generate-dependencies eom.gresource.xml)
+	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) "$<" --target=$@ \
+         --sourcedir=$(top_srcdir)/data --c-name _eom --generate-source
+
 eom-enum-types.h: eom-enum-types.h.template $(INST_H_FILES) $(GLIB_MKENUMS)
 	$(AM_V_GEN)(cd $(srcdir) && $(GLIB_MKENUMS) --template eom-enum-types.h.template $(INST_H_FILES)) > $@
 
@@ -192,6 +199,7 @@ eom-marshal.c: eom-marshal.list $(GLIB_GENMARSHAL)
 	$(AM_V_GEN)$(GLIB_GENMARSHAL) $< --body --header --prefix=eom_marshal > $@
 
 EXTRA_DIST = 				\
+	eom.gresource.xml		\
 	eom-enum-types.h.template	\
 	eom-enum-types.c.template	\
 	eom-marshal.list
diff --git a/src/eom-window.c b/src/eom-window.c
index 754d84d..e205aa5 100644
--- a/src/eom-window.c
+++ b/src/eom-window.c
@@ -4380,9 +4380,9 @@ eom_window_construct_ui (EomWindow *window)
 
 	gtk_ui_manager_insert_action_group (priv->ui_mgr, priv->actions_collection, 0);
 
-	if (!gtk_ui_manager_add_ui_from_file (priv->ui_mgr,
-					      EOM_DATA_DIR"/eom-ui.xml",
-					      &error)) {
+	if (!gtk_ui_manager_add_ui_from_resource (priv->ui_mgr,
+	                                          "/org/mate/eom/ui/eom-ui.xml",
+	                                          &error)) {
 		g_warning ("building menus failed: %s", error->message);
 		g_error_free (error);
 	}
diff --git a/src/eom.gresource.xml b/src/eom.gresource.xml
new file mode 100644
index 0000000..3c92450
--- /dev/null
+++ b/src/eom.gresource.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/mate/eom/ui">
+    <file>eom.css</file>
+    <file compressed="true" preprocess="xml-stripblanks">eom-ui.xml</file>
+  </gresource>
+</gresources>
+
+
+
diff --git a/src/main.c b/src/main.c
index d7fd2a1..7ec8442 100644
--- a/src/main.c
+++ b/src/main.c
@@ -96,6 +96,7 @@ main (int argc, char **argv)
 {
 	GError *error = NULL;
 	GOptionContext *ctx;
+	GFile *css_file;
 	GtkCssProvider *provider;
 
 	bindtextdomain (GETTEXT_PACKAGE, EOM_LOCALE_DIR);
@@ -140,10 +141,11 @@ main (int argc, char **argv)
 	eom_thumbnail_init ();
 
 	/* Load special style properties for EomThumbView's scrollbar */
+	css_file = g_file_new_for_uri ("resource:///org/mate/eom/ui/eom.css");
 	provider = gtk_css_provider_new ();
-	if (G_UNLIKELY (!gtk_css_provider_load_from_path(provider,
-							 EOM_CSS_FILE_PATH,
-							 &error)))
+	if (G_UNLIKELY (!gtk_css_provider_load_from_file(provider,
+	                                                 css_file,
+	                                                 &error)))
 	{
 		g_critical ("Could not load CSS data: %s", error->message);
 		g_clear_error (&error);
-- 
cgit v1.2.1