screenShield: Asyncify _syncInhibitor()
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4553 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1952>
This commit is contained in:
parent
85075192f3
commit
5791e257e7
@ -188,19 +188,14 @@ var LoginManagerSystemd = class {
|
||||
this._proxy.SuspendRemote(true);
|
||||
}
|
||||
|
||||
async inhibit(reason, callback) {
|
||||
try {
|
||||
async inhibit(reason, cancellable) {
|
||||
const inVariant = new GLib.Variant('(ssss)',
|
||||
['sleep', 'GNOME Shell', reason, 'delay']);
|
||||
const [outVariant_, fdList] =
|
||||
await this._proxy.call_with_unix_fd_list('Inhibit',
|
||||
inVariant, 0, -1, null, null);
|
||||
inVariant, 0, -1, null, cancellable);
|
||||
const [fd] = fdList.steal_fds();
|
||||
callback(new Gio.UnixInputStream({ fd }));
|
||||
} catch (e) {
|
||||
logError(e, 'Error getting systemd inhibitor');
|
||||
callback(null);
|
||||
}
|
||||
return new Gio.UnixInputStream({ fd });
|
||||
}
|
||||
|
||||
_prepareForSleep(proxy, sender, [aboutToSuspend]) {
|
||||
@ -236,8 +231,9 @@ var LoginManagerDummy = class {
|
||||
this.emit('prepare-for-sleep', false);
|
||||
}
|
||||
|
||||
inhibit(reason, callback) {
|
||||
callback(null);
|
||||
/* eslint-disable-next-line require-await */
|
||||
async inhibit() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(LoginManagerDummy.prototype);
|
||||
|
@ -203,7 +203,7 @@ var ScreenShield = class {
|
||||
return this._isModal;
|
||||
}
|
||||
|
||||
_syncInhibitor() {
|
||||
async _syncInhibitor() {
|
||||
const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY);
|
||||
const lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
|
||||
const inhibit = !!this._loginSession && this._loginSession.Active &&
|
||||
@ -215,22 +215,18 @@ var ScreenShield = class {
|
||||
|
||||
this._inhibited = inhibit;
|
||||
|
||||
if (inhibit) {
|
||||
this._loginManager.inhibit(_('GNOME needs to lock the screen'),
|
||||
inhibitor => {
|
||||
if (inhibitor) {
|
||||
if (this._inhibitor)
|
||||
inhibitor.close(null);
|
||||
else
|
||||
this._inhibitor = inhibitor;
|
||||
}
|
||||
this._inhibitCancellable?.cancel();
|
||||
this._inhibitCancellable = new Gio.Cancellable();
|
||||
|
||||
// Handle uninhibits that happened after the start
|
||||
if (!this._inhibited) {
|
||||
this._inhibitor?.close(null);
|
||||
this._inhibitor = null;
|
||||
if (inhibit) {
|
||||
try {
|
||||
this._inhibitor = await this._loginManager.inhibit(
|
||||
_('GNOME needs to lock the screen'),
|
||||
this._inhibitCancellable);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
log('Failed to inhibit suspend: %s'.format(e.message));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this._inhibitor?.close(null);
|
||||
this._inhibitor = null;
|
||||
|
Loading…
Reference in New Issue
Block a user