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 7d623c0..25af081 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), @@ -4337,26 +4333,31 @@ help_about_callback (GtkAction *action, "Copyright © 2011 Perberos\n" "Copyright © 2012-2018 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 @@ + + + + + encodings-dialog.ui + find-dialog.ui + keybinding-editor.ui + profile-manager.ui + profile-new-dialog.ui + profile-preferences.ui + skey-challenge.ui + terminal.xml + terminal.about + +