dbusServices/screensaver: Split out public ScreenSaver service
Commit 799bbdb50
split out the public Fdo notification service, so
that any app with permission to talk to org.freedesktop.Notifications
will in fact be limited to that service.
To a somewhat lesser extent this applies to the org.gnome.ScreenSaver
service as well, which some applications still use instead of the
Inhibit portal.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3452
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1520>
This commit is contained in:
parent
adfcd45bff
commit
af5aff3251
@ -6,6 +6,7 @@ launcherconf.set('libdir', libdir)
|
|||||||
dbus_services = {
|
dbus_services = {
|
||||||
'org.gnome.Shell.Extensions': 'extensions',
|
'org.gnome.Shell.Extensions': 'extensions',
|
||||||
'org.gnome.Shell.Notifications': 'notifications',
|
'org.gnome.Shell.Notifications': 'notifications',
|
||||||
|
'org.gnome.ScreenSaver': 'screensaver',
|
||||||
}
|
}
|
||||||
|
|
||||||
if enable_recorder
|
if enable_recorder
|
||||||
|
11
js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml
Normal file
11
js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/org/gnome/ScreenSaver/js">
|
||||||
|
<file>main.js</file>
|
||||||
|
<file>screenSaverService.js</file>
|
||||||
|
<file>dbusService.js</file>
|
||||||
|
|
||||||
|
<file>misc/config.js</file>
|
||||||
|
<file>misc/fileUtils.js</file>
|
||||||
|
</gresource>
|
||||||
|
</gresources>
|
11
js/dbusServices/screensaver/main.js
Normal file
11
js/dbusServices/screensaver/main.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/* exported main */
|
||||||
|
|
||||||
|
const { DBusService } = imports.dbusService;
|
||||||
|
const { ScreenSaverService } = imports.screenSaverService;
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
const service = new DBusService(
|
||||||
|
'org.gnome.ScreenSaver',
|
||||||
|
new ScreenSaverService());
|
||||||
|
service.run();
|
||||||
|
}
|
68
js/dbusServices/screensaver/screenSaverService.js
Normal file
68
js/dbusServices/screensaver/screenSaverService.js
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/* exported ScreenSaverService */
|
||||||
|
|
||||||
|
const { Gio, GLib } = imports.gi;
|
||||||
|
|
||||||
|
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||||
|
const { ServiceImplementation } = imports.dbusService;
|
||||||
|
|
||||||
|
const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver');
|
||||||
|
const ScreenSaverProxy = Gio.DBusProxy.makeProxyWrapper(ScreenSaverIface);
|
||||||
|
|
||||||
|
var ScreenSaverService = class extends ServiceImplementation {
|
||||||
|
constructor() {
|
||||||
|
super(ScreenSaverIface, '/org/gnome/ScreenSaver');
|
||||||
|
|
||||||
|
this._proxy = new ScreenSaverProxy(Gio.DBus.session,
|
||||||
|
'org.gnome.Shell.ScreenShield',
|
||||||
|
'/org/gnome/ScreenSaver',
|
||||||
|
(proxy, error) => {
|
||||||
|
if (error)
|
||||||
|
log(error.message);
|
||||||
|
});
|
||||||
|
|
||||||
|
this._proxy.connectSignal('ActiveChanged',
|
||||||
|
(proxy, sender, params) => {
|
||||||
|
this._dbusImpl.emit_signal('ActiveChanged',
|
||||||
|
new GLib.Variant('(b)', params));
|
||||||
|
});
|
||||||
|
this._proxy.connectSignal('WakeUpScreen',
|
||||||
|
() => this._dbusImpl.emit_signal('WakeUpScreen', null));
|
||||||
|
}
|
||||||
|
|
||||||
|
LockAsync(params, invocation) {
|
||||||
|
this._proxy.LockRemote(...params, (res, error) => {
|
||||||
|
if (this._handleError(invocation, error))
|
||||||
|
return;
|
||||||
|
|
||||||
|
invocation.return_value(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
GetActiveAsync(params, invocation) {
|
||||||
|
this._proxy.GetActiveRemote(...params, (res, error) => {
|
||||||
|
if (this._handleError(invocation, error))
|
||||||
|
return;
|
||||||
|
|
||||||
|
invocation.return_value(new GLib.Variant('(b)', res));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
SetActiveAsync(params, invocation) {
|
||||||
|
this._proxy.SetActiveRemote(...params, (res, error) => {
|
||||||
|
if (this._handleError(invocation, error))
|
||||||
|
return;
|
||||||
|
|
||||||
|
invocation.return_value(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
GetActiveTimeAsync(params, invocation) {
|
||||||
|
this._proxy.GetActiveTimeRemote(...params, (res, error) => {
|
||||||
|
if (this._handleError(invocation, error))
|
||||||
|
return;
|
||||||
|
|
||||||
|
invocation.return_value(new GLib.Variant('(u)', res));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -367,7 +367,8 @@ var ScreenSaverDBus = class {
|
|||||||
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenSaverIface, this);
|
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenSaverIface, this);
|
||||||
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver');
|
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver');
|
||||||
|
|
||||||
Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null);
|
Gio.DBus.session.own_name('org.gnome.Shell.ScreenShield',
|
||||||
|
Gio.BusNameOwnerFlags.NONE, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
LockAsync(parameters, invocation) {
|
LockAsync(parameters, invocation) {
|
||||||
|
Loading…
Reference in New Issue
Block a user