dbusService: Watch shell name from implementation
The service implementation already has to resolve the shell's unique name to exclude it from sender tracking. It can just as well take care of watching the shell D-Bus name, which simplifies the code and will allow for more flexibility when handling the shell disappearing from the bus. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3463>
This commit is contained in:
parent
04fd4b2503
commit
43dfb49722
@ -23,7 +23,15 @@ export class ServiceImplementation {
|
||||
this._senders = new Map();
|
||||
this._holdCount = 0;
|
||||
|
||||
this._shellName = this._getUniqueShellName();
|
||||
// Bail out when not running under gnome-shell
|
||||
Gio.DBus.watch_name(Gio.BusType.SESSION,
|
||||
'org.gnome.Shell',
|
||||
Gio.BusNameWatcherFlags.NONE,
|
||||
(c, name, owner) => (this._shellName = owner),
|
||||
() => {
|
||||
this._shellName = null;
|
||||
this.emit('shutdown');
|
||||
});
|
||||
|
||||
this._hasSignals = this._dbusImpl.get_info().signals.length > 0;
|
||||
this._shutdownTimeoutId = 0;
|
||||
@ -156,26 +164,6 @@ export class ServiceImplementation {
|
||||
that._queueShutdownCheck();
|
||||
};
|
||||
}
|
||||
|
||||
_getUniqueShellName() {
|
||||
try {
|
||||
const res = Gio.DBus.session.call_sync(
|
||||
'org.freedesktop.DBus',
|
||||
'/org/freedesktop/DBus',
|
||||
'org.freedesktop.DBus',
|
||||
'GetNameOwner',
|
||||
new GLib.Variant('(s)', ['org.gnome.Shell']),
|
||||
null,
|
||||
Gio.DBusCallFlags.NONE,
|
||||
-1,
|
||||
null);
|
||||
const [name] = res.deepUnpack();
|
||||
return name;
|
||||
} catch (e) {
|
||||
console.warn(`Failed to resolve shell name: ${e.message}`);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
Signals.addSignalMethods(ServiceImplementation.prototype);
|
||||
|
||||
@ -189,13 +177,6 @@ export class DBusService {
|
||||
}
|
||||
|
||||
async runAsync() {
|
||||
// Bail out when not running under gnome-shell
|
||||
Gio.DBus.watch_name(Gio.BusType.SESSION,
|
||||
'org.gnome.Shell',
|
||||
Gio.BusNameWatcherFlags.NONE,
|
||||
null,
|
||||
() => this._loop.quit());
|
||||
|
||||
this._service.register();
|
||||
|
||||
let flags = Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT;
|
||||
|
Loading…
x
Reference in New Issue
Block a user