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:
Florian Müllner 2024-09-04 19:39:41 +02:00
parent 04fd4b2503
commit 43dfb49722

View File

@ -23,7 +23,15 @@ export class ServiceImplementation {
this._senders = new Map(); this._senders = new Map();
this._holdCount = 0; 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._hasSignals = this._dbusImpl.get_info().signals.length > 0;
this._shutdownTimeoutId = 0; this._shutdownTimeoutId = 0;
@ -156,26 +164,6 @@ export class ServiceImplementation {
that._queueShutdownCheck(); 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); Signals.addSignalMethods(ServiceImplementation.prototype);
@ -189,13 +177,6 @@ export class DBusService {
} }
async runAsync() { 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(); this._service.register();
let flags = Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT; let flags = Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT;