loginManager: Add session-removed signal and getSession method

These changes will be used by the next commit when displaying a
conflicting session dialog.

session-removed signal will be used to close the conflicting session dialog
if it's not needed anymore.

getSession method will be used when a session is opened, to check if
there's already a conflicting opened session.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3134>
This commit is contained in:
Joan Torres 2024-02-07 12:59:09 +01:00 committed by Ray Strode
parent 7e4c7678f1
commit 3517749537

View File

@ -101,6 +101,8 @@ class LoginManagerSystemd extends Signals.EventEmitter {
'/org/freedesktop/login1/user/self');
this._proxy.connectSignal('PrepareForSleep',
this._prepareForSleep.bind(this));
this._proxy.connectSignal('SessionRemoved',
this._sessionRemoved.bind(this));
}
async getCurrentSessionProxy() {
@ -189,6 +191,10 @@ class LoginManagerSystemd extends Signals.EventEmitter {
}
}
getSession(objectPath) {
return new SystemdLoginSession(Gio.DBus.system, 'org.freedesktop.login1', objectPath);
}
suspend() {
this._proxy.SuspendAsync(true);
}
@ -206,6 +212,10 @@ class LoginManagerSystemd extends Signals.EventEmitter {
_prepareForSleep(proxy, sender, [aboutToSuspend]) {
this.emit('prepare-for-sleep', aboutToSuspend);
}
_sessionRemoved(proxy, sender, [sessionId]) {
this.emit('session-removed', sessionId);
}
}
class LoginManagerDummy extends Signals.EventEmitter {
@ -237,6 +247,10 @@ class LoginManagerDummy extends Signals.EventEmitter {
return new Promise(resolve => resolve([]));
}
getSession(_objectPath) {
return null;
}
suspend() {
this.emit('prepare-for-sleep', true);
this.emit('prepare-for-sleep', false);