[glom] Store Glade files in a GResource instead of installing them.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom] Store Glade files in a GResource instead of installing them.
- Date: Tue, 8 Oct 2013 20:39:44 +0000 (UTC)
commit 1387e85443fd1d675f1556b5d365686c0e0acd31
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Oct 8 22:09:55 2013 +0200
Store Glade files in a GResource instead of installing them.
* ui/glom.gresource.xml: List all the .glade files.
* Makefile_glom.am: Use glib-compile-resources to create a .c file
with the GResource data, and compile and link it in to the
Glom executable.
* glom/glade_utils.h: Use Gtk::Builder::create_from_resource() instead
of create_from_file().
This simplifies installation.
Makefile.am | 5 +---
Makefile_glom.am | 13 +++++++++-
configure.ac | 5 +++-
glom/glade_utils.h | 37 +++++++++-------------------
ui/glom.gresource.xml | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 94 insertions(+), 31 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index d0eeced..0e070f6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -240,13 +240,10 @@ endif
# The AppData file:
-appdata_in_files = glom.appdata.xml.in
-appdata_files = $(appdata_in_files:.xml.in=.xml)
+appdata_files = glom.appdata.xml
appdatadir = $(datadir)/appdata
dist_appdata_DATA = $(appdata_files)
-EXTRA_DIST = $(appdata_in_files)
-
@INTLTOOL_XML_RULE@
diff --git a/Makefile_glom.am b/Makefile_glom.am
index f3301c7..55c2462 100644
--- a/Makefile_glom.am
+++ b/Makefile_glom.am
@@ -28,6 +28,16 @@ bin_PROGRAMS += glom/glom
glom_glom_CPPFLAGS = $(glom_includes) $(GLOM_CFLAGS) $(PYTHON_CPPFLAGS) $(BOOST_PYTHON_CFLAGS)
$(GCOV_CFLAGS) $(glom_defines)
+# Generate the GResource source file:
+# TODO: Do not use all .glade files in the client-only build.
+glom_resource_file = ui/glom.gresource.xml
+BUILT_SOURCES = ui/glom-resources.c
+ui/glom-resources.c: $(glom_resource_file) $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies
$(glom_resource_file))
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source
$(glom_resource_file)
+
+EXTRA_DIST = \
+ $(glom_resource_file)
+
glom_eggspreadtable_files = \
glom/utility_widgets/eggspreadtable/eggmarshalers.c \
glom/utility_widgets/eggspreadtable/eggmarshalers.h \
@@ -64,7 +74,8 @@ glom_canvas_files = \
glom/utility_widgets/canvas/canvas_table_movable.cc \
glom/utility_widgets/canvas/canvas_table_movable.h \
glom/utility_widgets/canvas/canvas_text_movable.cc \
- glom/utility_widgets/canvas/canvas_text_movable.h
+ glom/utility_widgets/canvas/canvas_text_movable.h \
+ $(BUILT_SOURCES)
glom_source_files = \
glom/appwindow.cc \
diff --git a/configure.ac b/configure.ac
index d63b13e..571a4e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -374,12 +374,15 @@ fi
AM_CONDITIONAL(GCOV_ENABLED, test x$enable_gcov = xyes)
AC_MSG_RESULT($enable_gcov)
+# GResources
+GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
+AC_SUBST(GLIB_COMPILE_RESOURCES)
AC_CONFIG_FILES([Makefile
- docs/user-guide/Makefile
po/Makefile.in
glom.desktop.in
glom/libglom/glom-${GLOM_ABI_VERSION}.pc:glom/libglom/glom.pc.in
+ docs/user-guide/Makefile
docs/libglom_reference/Makefile
docs/libglom_reference/Doxyfile
docs/pyglom_reference/Makefile
diff --git a/glom/glade_utils.h b/glom/glade_utils.h
index bab4a6b..ca6ed6d 100644
--- a/glom/glade_utils.h
+++ b/glom/glade_utils.h
@@ -35,28 +35,10 @@ namespace Glom
namespace Utils
{
-inline std::string get_glade_file_path(const std::string& filename)
+inline std::string get_glade_resource_path(const std::string& filename)
{
-#ifdef G_OS_WIN32
- gchar* directory = g_win32_get_package_installation_directory_of_module(0);
- const std::string result = Glib::build_filename(directory, Glib::build_filename("share/glom/glade",
filename));
- g_free(directory);
- directory = 0;
-#else
- const std::string result = Glib::build_filename(GLOM_PKGDATADIR, Glib::build_filename("glade", filename));
-#endif
-
- // Check that it exists:
- const Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(result);
- if(file && file->query_exists())
- return result;
-
- // Try to fall back to the uninstalled file in the source tree,
- // for instance when running "make distcheck", which doesn't install to _inst/
- // before running check.
- std::cout << "Glade file not found: " << result << std::endl;
- std::cout << "Falling back to the local file." << std::endl;
- return Glib::build_filename(GLOM_PKGDATADIR_NOTINSTALLED, filename);
+ // This is the same prefix that is in the *gresource.xml.in file.
+ return "/org/gnome/glom/ui/" + filename;
}
/** This assumes that there are no other top-level windows in the glade file.
@@ -70,11 +52,11 @@ void helper_get_glade_widget_derived_with_warning(const std::string& filename, c
try
{
- const std::string filepath = Utils::get_glade_file_path(filename);
+ const std::string filepath = Utils::get_glade_resource_path(filename);
if(load_all)
- refXml = Gtk::Builder::create_from_file(filepath);
+ refXml = Gtk::Builder::create_from_resource(filepath);
else
- refXml = Gtk::Builder::create_from_file(filepath, id);
+ refXml = Gtk::Builder::create_from_resource(filepath, id);
}
catch(const Gtk::BuilderError& ex)
{
@@ -109,6 +91,7 @@ void get_glade_child_widget_derived_with_warning(T_Widget*& widget)
// Check the path to the installed .glade file:
// The id is the same as the filename, in a developer/operator sub-directory:
+ // TODO: Should we use build_filename()?
const std::string filename = Glib::build_filename(
(T_Widget::glade_developer ? "developer" : "operator"),
std::string(T_Widget::glade_id) + ".glade");
@@ -142,7 +125,7 @@ void get_glade_widget_with_warning(const std::string& filename, const Glib::ustr
try
{
- refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path(filename), id);
+ refXml = Gtk::Builder::create_from_resource(Utils::get_glade_resource_path(filename), id);
}
catch(const Gtk::BuilderError& ex)
{
@@ -156,6 +139,10 @@ void get_glade_widget_with_warning(const std::string& filename, const Glib::ustr
{
std::cerr << ex.what() << std::endl;
}
+ catch(const Gio::ResourceError& ex)
+ {
+ std::cerr << ex.what() << std::endl;
+ }
if(refXml)
{
diff --git a/ui/glom.gresource.xml b/ui/glom.gresource.xml
new file mode 100644
index 0000000..cceeca9
--- /dev/null
+++ b/ui/glom.gresource.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/glom">
+ <file preprocess="xml-stripblanks">ui/developer/box_formatting.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/box_print_layouts.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/box_reports.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_add_related_table.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_change_language.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_choose_field.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_choose_relationship.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_choose_user.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_database_preferences.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_error_create_database.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_fieldslist.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_field_summary.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_flowtable.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_group_by.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_initial_password.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_layout_field_properties.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_line.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_new_group.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_new_library_script.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_notebook.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_relationships_overview.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_script_library.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_sort_fields.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_translation_copy.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_translation_identify_original.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/dialog_user.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_button_script.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_data_layout_export.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_data_layout.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_design.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_field_calculation.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_field_definition_edit.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_groups.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_imageobject.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_print_layout_edit.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_report_layout.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_text_format.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_textobject.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_translations.glade</file>
+ <file preprocess="xml-stripblanks">ui/developer/window_users.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/box_navigation_tables.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_choose_date.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_connection.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_data_invalid_format.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_existing_or_new.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_find_id.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_image_load_progress.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_image_save_progress.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_import_csv.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_import_csv_progress.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/dialog_new_record.glade</file>
+ <file preprocess="xml-stripblanks">ui/operator/window_main.glade</file>
+
+ </gresource>
+</gresources>
+
+
+
+
+
+
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]