diff --git a/js/dbusServices/dbusService.js b/js/dbusServices/dbusService.js index 941deaf29..f1bc4c6f6 100644 --- a/js/dbusServices/dbusService.js +++ b/js/dbusServices/dbusService.js @@ -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;