2020-03-03 21:06:57 -05:00
|
|
|
launcherconf = configuration_data()
|
|
|
|
launcherconf.set('PACKAGE_NAME', meson.project_name())
|
|
|
|
launcherconf.set('prefix', prefix)
|
|
|
|
launcherconf.set('libdir', libdir)
|
|
|
|
|
|
|
|
dbus_services = {
|
dbusServices/extensions: Proxy Extensions API
Similar to the previously added org.freedesktop.Notifications proxy,
this exposes the org.gnome.Shell.Extensions API and forwards any
request to the real implementation in gnome-shell.
The motivation differs though: We want to be able to package the
extension app as flatpak and distribute it separately, but the
extension prefs dialog is hard to impossible to sandbox:
- filenames need translating between host and sandbox, and we
can only do that in some cases (serializing/deserializing
extensions), but not others (extension settings that refer
to files)
- system extensions install their GSettings schemas in the system
path; the best we can do there is assume a host prefix of /usr
and set GSETTINGS_SCHEMA_DIR in the flatpak (eeks)
- extensions may rely on additional typelibs that are present on
the host (for example because gnome-shell itself depends on
them), but not inside the sandbox - unless we bundle all of
gnome-shell's dependencies
- if gjs/mozjs differ between host and sandbox, extensions must
handle different runtimes for the extension and its prefs
And all those issues occur despite a very permissive sandbox (full
host filesystem access, full dconf access, full org.gnome.Shell
access (including Eval()!)).
This new service will give us an alternative place for handling
the preference dialog:
- it runs outside of gnome-shell process, so can open windows
- it runs on the host, so the extension's prefs get to run
in the same namespace as the extension itself
That is, the service will provide portal-like functionality (albeit
not using the org.freedesktop.portal.* namespace, as extension
management is an inherently privileged operation).
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1106
2020-03-03 22:02:28 -05:00
|
|
|
'org.gnome.Shell.Extensions': 'extensions',
|
2019-05-16 15:08:06 -04:00
|
|
|
'org.gnome.Shell.Notifications': 'notifications',
|
2020-03-03 21:06:57 -05:00
|
|
|
}
|
|
|
|
|
2020-04-23 14:46:44 -04:00
|
|
|
if enable_recorder
|
|
|
|
dbus_services += {
|
|
|
|
'org.gnome.Shell.Screencast': 'screencast',
|
|
|
|
}
|
|
|
|
endif
|
|
|
|
|
2020-03-03 21:06:57 -05:00
|
|
|
config_dir = '@0@/..'.format(meson.current_build_dir())
|
|
|
|
|
|
|
|
foreach service, dir : dbus_services
|
|
|
|
configure_file(
|
|
|
|
input: 'dbus-service.in',
|
|
|
|
output: service,
|
|
|
|
configuration: launcherconf,
|
|
|
|
install_dir: pkgdatadir,
|
|
|
|
)
|
|
|
|
|
|
|
|
serviceconf = configuration_data()
|
|
|
|
serviceconf.set('service', service)
|
|
|
|
serviceconf.set('gjs', gjs.path())
|
|
|
|
serviceconf.set('pkgdatadir', pkgdatadir)
|
|
|
|
|
|
|
|
configure_file(
|
|
|
|
input: 'dbus-service.service.in',
|
|
|
|
output: service + '.service',
|
|
|
|
configuration: serviceconf,
|
|
|
|
install_dir: servicedir
|
|
|
|
)
|
|
|
|
|
|
|
|
gnome.compile_resources(
|
|
|
|
service + '.src',
|
|
|
|
service + '.src.gresource.xml',
|
|
|
|
dependencies: [config_js],
|
|
|
|
source_dir: ['.', '..', dir, config_dir],
|
|
|
|
gresource_bundle: true,
|
|
|
|
install: true,
|
|
|
|
install_dir: pkgdatadir
|
|
|
|
)
|
|
|
|
endforeach
|