fileUtils: Add helper for loading D-Bus XML from resource
Commit dbf993300a
moved all inline D-Bus interface descriptions to template
strings so we can stop escaping line breaks.
Unfortunately that unveiled a grave bug in xgettext, which currently cannot
handle files that contain both backtick and slash characters - as a result,
translations from affected files have started to disappear as translators
run xgettext/msgmerge.
Instead of reverting the change and getting the crusty escaping back, we
will take this as an opportunity to stop inlining the XML altogether and
load it from a resource instead.
To facilitate that, add a small helper method that loads a D-Bus interface
description from a dedicated resource bundle.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/537
This commit is contained in:
parent
150a640c66
commit
f42d9df3e0
5
data/gnome-shell-dbus-interfaces.gresource.xml
Normal file
5
data/gnome-shell-dbus-interfaces.gresource.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/org/gnome/shell/dbus-interfaces">
|
||||||
|
</gresource>
|
||||||
|
</gresources>
|
@ -44,22 +44,22 @@ endforeach
|
|||||||
subdir('dbus-interfaces')
|
subdir('dbus-interfaces')
|
||||||
subdir('theme')
|
subdir('theme')
|
||||||
|
|
||||||
theme_resources = gnome.compile_resources(
|
data_resources = [
|
||||||
'gnome-shell-theme', 'gnome-shell-theme.gresource.xml',
|
['dbus-interfaces', []],
|
||||||
source_dir: 'theme',
|
['osk-layouts', []],
|
||||||
dependencies: theme_deps,
|
['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,
|
gresource_bundle: true,
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: pkgdatadir
|
install_dir: pkgdatadir
|
||||||
)
|
)
|
||||||
|
endforeach
|
||||||
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
|
|
||||||
)
|
|
||||||
|
|
||||||
perfconf = configuration_data()
|
perfconf = configuration_data()
|
||||||
perfconf.set('datadir', datadir)
|
perfconf.set('datadir', datadir)
|
||||||
|
@ -14,6 +14,7 @@ var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
|||||||
var LOCALEDIR = '@datadir@/locale';
|
var LOCALEDIR = '@datadir@/locale';
|
||||||
/* other standard directories */
|
/* other standard directories */
|
||||||
var LIBEXECDIR = '@libexecdir@';
|
var LIBEXECDIR = '@libexecdir@';
|
||||||
|
var PKGDATADIR = '@datadir@/@PACKAGE_NAME@';
|
||||||
var VPNDIR = '@vpndir@';
|
var VPNDIR = '@vpndir@';
|
||||||
/* g-i package versions */
|
/* g-i package versions */
|
||||||
var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
|
var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
const Config = imports.misc.config;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
function collectFromDatadirs(subdir, includeUserDir, processFile) {
|
function collectFromDatadirs(subdir, includeUserDir, processFile) {
|
||||||
@ -70,3 +71,29 @@ function recursivelyMoveDir(srcDir, destDir) {
|
|||||||
recursivelyMoveDir(srcChild, destChild);
|
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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user