dbusService: Handle shell restarts better

Our D-Bus services don't make sense outside a GNOME session, so
they shut down automatically when gnome-shell is not on the bus.

However this does not only apply when activating a service from
a non-GNOME session, but also when restarting gnome-shell on Xorg.

This is particularly problematic for services that shut down
automatically, as they lose all tracking state, even when
re-activated.

Address this by queuing a shutdown check instead of shutting down
immediately, so that the service can pick up the new shell name
provided it appears before the timeout (i.e. two seconds).

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7843
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3463>
This commit is contained in:
Florian Müllner 2024-09-04 20:48:55 +02:00
parent 43dfb49722
commit 45ff3f9e1e

View File

@ -30,7 +30,13 @@ export class ServiceImplementation {
(c, name, owner) => (this._shellName = owner),
() => {
this._shellName = null;
this.emit('shutdown');
// For auto-shutdown services, delay shutting
// down in case the shell reappears
if (this._autoShutdown)
this._queueShutdownCheck();
else
this.emit('shutdown');
});
this._hasSignals = this._dbusImpl.get_info().signals.length > 0;
@ -104,7 +110,7 @@ export class ServiceImplementation {
if (GLib.getenv('SHELL_DBUS_PERSIST'))
return;
if (this._holdCount > 0)
if (this._shellName && this._holdCount > 0)
return;
this.emit('shutdown');