[gnome-shell/gnome-3-16] ScreenShield: tie the suspend inhibitor to our isActive property
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-16] ScreenShield: tie the suspend inhibitor to our isActive property
- Date: Thu, 14 May 2015 13:12:50 +0000 (UTC)
commit 518e7d9fc50656e76d683e12aa1826e1b2c8803a
Author: Rui Matos <tiagomatos gmail com>
Date: Wed May 13 21:41:07 2015 +0200
ScreenShield: tie the suspend inhibitor to our isActive property
The whole point of holding a suspend inhibitor is to be able to lock
before suspending.
Currently, when resuming we immediately take the inhibitor without
checking that we're locked which means that we won't be able to
release this inhibitor if we don't unlock at least once.
To prevent that and to better match the inhibitor's intention in the
first place, we can tie the inhibitor with not being locked. In
practice, we also want to let the locking animation finish before
suspending, so we'll tie the inhibitor with not being active
instead.
https://bugzilla.gnome.org/show_bug.cgi?id=749228
js/ui/screenShield.js | 70 ++++++++++++++++++++++--------------------------
1 files changed, 32 insertions(+), 38 deletions(-)
---
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index d50113f..e81c782 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -507,12 +507,9 @@ const ScreenShield = new Lang.Class({
this._liftShield(true, 0);
}));
- this._inhibitor = null;
- this._aboutToSuspend = false;
this._loginManager = LoginManager.getLoginManager();
this._loginManager.connect('prepare-for-sleep',
Lang.bind(this, this._prepareForSleep));
- this._inhibitSuspend();
this._loginManager.getCurrentSessionProxy(Lang.bind(this,
function(sessionProxy) {
@@ -522,6 +519,7 @@ const ScreenShield = new Lang.Class({
}));
this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
+ this._settings.connect('changed::' + LOCK_ENABLED_KEY, Lang.bind(this, this._syncInhibitor));
this._isModal = false;
this._hasLockScreen = false;
@@ -547,6 +545,18 @@ const ScreenShield = new Lang.Class({
this.idleMonitor = Meta.IdleMonitor.get_core();
this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
+
+ this._syncInhibitor();
+ },
+
+ _setActive: function(active) {
+ let prevIsActive = this._isActive;
+ this._isActive = active;
+
+ if (prevIsActive != this._isActive)
+ this.emit('active-changed');
+
+ this._syncInhibitor();
},
_createBackground: function(monitorIndex) {
@@ -664,33 +674,27 @@ const ScreenShield = new Lang.Class({
return Clutter.EVENT_STOP;
},
- _inhibitSuspend: function() {
- this._loginManager.inhibit(_("GNOME needs to lock the screen"),
- Lang.bind(this, function(inhibitor) {
- if (this._inhibitor)
- this._inhibitor.close(null);
- this._inhibitor = inhibitor;
- }));
- },
-
- _uninhibitSuspend: function() {
- if (this._inhibitor)
- this._inhibitor.close(null);
- this._inhibitor = null;
+ _syncInhibitor: function() {
+ let inhibit = (!this._isActive && this._settings.get_boolean(LOCK_ENABLED_KEY));
+ if (inhibit) {
+ this._loginManager.inhibit(_("GNOME needs to lock the screen"),
+ Lang.bind(this, function(inhibitor) {
+ if (this._inhibitor)
+ this._inhibitor.close(null);
+ this._inhibitor = inhibitor;
+ }));
+ } else {
+ if (this._inhibitor)
+ this._inhibitor.close(null);
+ this._inhibitor = null;
+ }
},
_prepareForSleep: function(loginManager, aboutToSuspend) {
- this._aboutToSuspend = aboutToSuspend;
-
if (aboutToSuspend) {
- if (!this._settings.get_boolean(LOCK_ENABLED_KEY)) {
- this._uninhibitSuspend();
- return;
- }
- this.lock(true);
+ if (this._settings.get_boolean(LOCK_ENABLED_KEY))
+ this.lock(true);
} else {
- this._inhibitSuspend();
-
this._wakeUpScreen();
}
},
@@ -1085,15 +1089,7 @@ const ScreenShield = new Lang.Class({
},
_completeLockScreenShown: function() {
- let prevIsActive = this._isActive;
- this._isActive = true;
-
- if (prevIsActive != this._isActive)
- this.emit('active-changed');
-
- if (this._aboutToSuspend)
- this._uninhibitSuspend();
-
+ this._setActive(true);
this.emit('lock-screen-shown');
},
@@ -1187,8 +1183,7 @@ const ScreenShield = new Lang.Class({
// gnome-settings-daemon will stop blanking the screen
this._activationTime = 0;
- this._isActive = false;
- this.emit('active-changed');
+ this._setActive(false);
return;
}
@@ -1231,9 +1226,8 @@ const ScreenShield = new Lang.Class({
}
this._activationTime = 0;
- this._isActive = false;
+ this._setActive(false);
this._isLocked = false;
- this.emit('active-changed');
this.emit('locked-changed');
global.set_runtime_state(LOCKED_STATE_STR, null);
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]