[gnome-shell] ScreenShield: don't rely on gnome-session to hide the lightbox
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] ScreenShield: don't rely on gnome-session to hide the lightbox
- Date: Mon, 5 Nov 2012 21:08:10 +0000 (UTC)
commit 1c3e7330f368e1574d71df6b137677a295eb740d
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Sun Oct 28 12:26:21 2012 +0100
ScreenShield: don't rely on gnome-session to hide the lightbox
If we lock before the user becomes active again, gnome-session will never
change presence from IDLE, and thus we'll never hide the lightbox.
Instead, install our own idle monitor.
https://bugzilla.gnome.org/show_bug.cgi?id=687020
js/ui/screenShield.js | 60 +++++++++++++++++++++++++++++-------------------
1 files changed, 36 insertions(+), 24 deletions(-)
---
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 52c7dcc..6dcd188 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -436,6 +436,8 @@ const ScreenShield = new Lang.Class({
{ inhibitEvents: true,
fadeInTime: STANDARD_FADE_TIME,
fadeFactor: 1 });
+
+ this.idleMonitor = new GnomeDesktop.IdleMonitor();
},
_onLockScreenKeyRelease: function(actor, event) {
@@ -545,35 +547,43 @@ const ScreenShield = new Lang.Class({
},
_onStatusChanged: function(status) {
- if (status == GnomeSession.PresenceStatus.IDLE) {
- if (this._dialog) {
- this._dialog.cancel();
- if (!this._isGreeter) {
- this._dialog = null;
- }
- }
+ if (status != GnomeSession.PresenceStatus.IDLE)
+ return;
- if (!this._isModal) {
- Main.pushModal(this.actor);
- this._isModal = true;
+ if (this._dialog) {
+ this._dialog.cancel();
+ if (!this._isGreeter) {
+ this._dialog = null;
}
+ }
- if (!this._isActive) {
- this._lightbox.show();
+ if (!this._isModal) {
+ Main.pushModal(this.actor);
+ this._isModal = true;
+ }
- if (this._activationTime == 0)
- this._activationTime = GLib.get_monotonic_time();
- }
- } else {
- let lightboxWasShown = this._lightbox.shown;
- this._lightbox.hide();
+ if (!this._isActive) {
+ this._lightbox.show();
- let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
- if (shouldLock || this._isActive) {
- this.lock(false);
- } else if (this._isModal) {
- this.unlock();
- }
+ if (this._activationTime == 0)
+ this._activationTime = GLib.get_monotonic_time();
+
+ this._becameActiveId = this.idleMonitor.connect('became-active', Lang.bind(this, function() {
+ this.idleMonitor.disconnect(this._becameActiveId);
+
+ let lightboxWasShown = this._lightbox.shown;
+ this._lightbox.hide();
+
+ let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
+ if (shouldLock || this._isLocked) {
+ this.lock(false);
+ } else if (this._isActive) {
+ this.unlock();
+ }
+ }));
+
+ this._isActive = true;
+ this.emit('lock-status-changed');
}
},
@@ -830,6 +840,7 @@ const ScreenShield = new Lang.Class({
this._activationTime = 0;
this._isActive = false;
+ this._isLocked = false;
this.emit('lock-status-changed');
},
@@ -854,6 +865,7 @@ const ScreenShield = new Lang.Class({
this._resetLockScreen(animate, animate);
this._isActive = true;
+ this._isLocked = true;
this.emit('lock-status-changed');
},
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]