diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index d5ca644fd..07e450f8f 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -429,6 +429,7 @@ const ScreenShield = new Lang.Class({ this._isGreeter = false; this._isActive = false; this._inUnlockAnimation = false; + this._activationTime = 0; this._lightbox = new Lightbox.Lightbox(Main.uiGroup, { inhibitEvents: true, @@ -556,8 +557,12 @@ const ScreenShield = new Lang.Class({ this._isModal = true; } - if (!this._isActive) + if (!this._isActive) { this._lightbox.show(); + + if (this._activationTime == 0) + this._activationTime = GLib.get_monotonic_time(); + } } else { let lightboxWasShown = this._lightbox.shown; this._lightbox.hide(); @@ -774,6 +779,10 @@ const ScreenShield = new Lang.Class({ return this._isActive; }, + get activationTime() { + return this._activationTime; + }, + _tweenUnlocked: function() { this._inUnlockAnimation = true; this.unlock(); @@ -818,6 +827,7 @@ const ScreenShield = new Lang.Class({ if (Main.sessionMode.currentMode == 'unlock-dialog') Main.sessionMode.popMode('unlock-dialog'); + this._activationTime = 0; this._isActive = false; this.emit('lock-status-changed'); }, @@ -828,6 +838,9 @@ const ScreenShield = new Lang.Class({ this._isModal = true; } + if (this._activationTime == 0) + this._activationTime = GLib.get_monotonic_time(); + this.actor.show(); if (Main.sessionMode.currentMode != 'unlock-dialog' && diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index 65465ef5b..7a625af37 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -59,6 +59,9 @@ const ScreenSaverIface = + + + @@ -373,5 +376,13 @@ const ScreenSaverDBus = new Lang.Class({ GetActive: function() { return this._screenShield.locked; - } + }, + + GetActiveTime: function() { + let started = this._screenShield.activationTime; + if (started > 0) + return Math.floor((GLib.get_monotonic_time() - started) / 1000000); + else + return 0; + }, });