diff --git a/data/gnome-shell-dbus-interfaces.gresource.xml b/data/gnome-shell-dbus-interfaces.gresource.xml new file mode 100644 index 000000000..bc637eefd --- /dev/null +++ b/data/gnome-shell-dbus-interfaces.gresource.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/data/meson.build b/data/meson.build index e0b879cd1..31ac4514e 100644 --- a/data/meson.build +++ b/data/meson.build @@ -44,22 +44,22 @@ endforeach subdir('dbus-interfaces') subdir('theme') -theme_resources = gnome.compile_resources( - 'gnome-shell-theme', 'gnome-shell-theme.gresource.xml', - source_dir: 'theme', - dependencies: theme_deps, - gresource_bundle: true, - install: true, - install_dir: pkgdatadir -) - -osk_layout_resources = gnome.compile_resources( - 'gnome-shell-osk-layouts', 'gnome-shell-osk-layouts.gresource.xml', - source_dir: 'osk-layouts', - gresource_bundle: true, - install: true, - install_dir: pkgdatadir -) +data_resources = [ + ['dbus-interfaces', []], + ['osk-layouts', []], + ['theme', theme_deps] +] +foreach resource : data_resources + gnome.compile_resources( + 'gnome-shell-' + resource[0], + 'gnome-shell-@0@.gresource.xml'.format(resource[0]), + source_dir: resource[0], + dependencies: resource[1], + gresource_bundle: true, + install: true, + install_dir: pkgdatadir + ) +endforeach perfconf = configuration_data() perfconf.set('datadir', datadir) diff --git a/js/misc/config.js.in b/js/misc/config.js.in index 28bff96e4..065d7a0a2 100644 --- a/js/misc/config.js.in +++ b/js/misc/config.js.in @@ -14,6 +14,7 @@ var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@'; var LOCALEDIR = '@datadir@/locale'; /* other standard directories */ var LIBEXECDIR = '@libexecdir@'; +var PKGDATADIR = '@datadir@/@PACKAGE_NAME@'; var VPNDIR = '@vpndir@'; /* g-i package versions */ var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@' diff --git a/js/misc/fileUtils.js b/js/misc/fileUtils.js index 036017e67..81cd92c94 100644 --- a/js/misc/fileUtils.js +++ b/js/misc/fileUtils.js @@ -3,6 +3,7 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Lang = imports.lang; +const Config = imports.misc.config; const Params = imports.misc.params; function collectFromDatadirs(subdir, includeUserDir, processFile) { @@ -70,3 +71,29 @@ function recursivelyMoveDir(srcDir, destDir) { recursivelyMoveDir(srcChild, destChild); } } + +let _ifaceResource = null; +function loadInterfaceXML(iface) { + if (!_ifaceResource) { + // don't use global.datadir so the method is usable from tools + let path = Config.PKGDATADIR + '/gnome-shell-dbus-interfaces.gresource'; + _ifaceResource = Gio.Resource.load(path); + _ifaceResource._register(); + } + + let xml = null; + let uri = 'resource:///org/gnome/shell/dbus-interfaces/' + iface + '.xml'; + let f = Gio.File.new_for_uri(uri); + + try { + let [ok, bytes] = f.load_contents(null); + if (bytes instanceof Uint8Array) + xml = imports.byteArray.toString(bytes) + else + xml = bytes; + } catch (e) { + log('Failed to load D-Bus interface ' + iface); + } + + return xml; +}