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:
@ -30,6 +30,12 @@ export class ServiceImplementation {
|
|||||||
(c, name, owner) => (this._shellName = owner),
|
(c, name, owner) => (this._shellName = owner),
|
||||||
() => {
|
() => {
|
||||||
this._shellName = null;
|
this._shellName = null;
|
||||||
|
|
||||||
|
// For auto-shutdown services, delay shutting
|
||||||
|
// down in case the shell reappears
|
||||||
|
if (this._autoShutdown)
|
||||||
|
this._queueShutdownCheck();
|
||||||
|
else
|
||||||
this.emit('shutdown');
|
this.emit('shutdown');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -104,7 +110,7 @@ export class ServiceImplementation {
|
|||||||
if (GLib.getenv('SHELL_DBUS_PERSIST'))
|
if (GLib.getenv('SHELL_DBUS_PERSIST'))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._holdCount > 0)
|
if (this._shellName && this._holdCount > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.emit('shutdown');
|
this.emit('shutdown');
|
||||||
|
Reference in New Issue
Block a user