UnlockDialog: go back to the lock screen automatically when idle

Now that GDM no longer emits auth failures after 25 seconds, we
need to handle inactivity ourselves.
This has also the advantage that it tracks real inactivity, rather
than a timeout from a fixed point in time.

https://bugzilla.gnome.org/show_bug.cgi?id=682041
This commit is contained in:
Giovanni Campagna 2012-08-16 21:24:53 +02:00
parent 6a9b1996e4
commit 341b6a1290

View File

@ -20,6 +20,9 @@ const UserMenu = imports.ui.userMenu;
const Batch = imports.gdm.batch; const Batch = imports.gdm.batch;
const GdmUtil = imports.gdm.util; const GdmUtil = imports.gdm.util;
// The timeout before going back automatically to the lock screen (in seconds)
const IDLE_TIMEOUT = 2 * 60;
// A widget showing the user avatar and name // A widget showing the user avatar and name
const UserWidget = new Lang.Class({ const UserWidget = new Lang.Class({
Name: 'UserWidget', Name: 'UserWidget',
@ -154,6 +157,11 @@ const UnlockDialog = new Lang.Class({
this.emit('loaded'); this.emit('loaded');
return false; return false;
})); }));
this._idleMonitor = Shell.IdleMonitor.get();
// this dialog is only created after user activity (curtain drag or
// escape key press), so the timeout will fire after IDLE_TIMEOUT seconds of inactivity
this._idleWatchId = this._idleMonitor.add_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
}, },
_updateOkButton: function(sensitive) { _updateOkButton: function(sensitive) {
@ -218,6 +226,12 @@ const UnlockDialog = new Lang.Class({
destroy: function() { destroy: function() {
this._userVerifier.clear(); this._userVerifier.clear();
if (this._idleWatchId) {
this._idleMonitor.remove_watch(this._idleWatchId);
this._idleWatchId = 0;
}
this.parent(); this.parent();
}, },