ScreenShield: when explicitly locking, tween the shield from the top

The curtain should appear to be an overlay on top of the system,
and since it is lifted by dragging up, it makes sense to slide it
down on lock.

https://bugzilla.gnome.org/show_bug.cgi?id=681143
This commit is contained in:
Giovanni Campagna 2012-08-03 19:42:43 +02:00 committed by Florian Müllner
parent 12a71be076
commit d7f54213f1
2 changed files with 42 additions and 17 deletions

View File

@ -2201,12 +2201,12 @@ StButton.popup-menu-item:insensitive {
/* Screen shield */ /* Screen shield */
#screenShieldGroup { #lockDialogGroup {
background: #2e3436 url(noise-texture.png); background: #2e3436 url(noise-texture.png);
background-repeat: repeat; background-repeat: repeat;
} }
#screenShieldGroup .arrow { #lockScreenGroup .arrow {
color: #333333; color: #333333;
width: 100px; width: 100px;
height: 50px; height: 50px;

View File

@ -17,7 +17,7 @@ const Tweener = imports.ui.tweener;
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver'; const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
const LOCK_ENABLED_KEY = 'lock-enabled'; const LOCK_ENABLED_KEY = 'lock-enabled';
const CURTAIN_SLIDE_TIME = 1.2; const CURTAIN_SLIDE_TIME = 0.8;
// fraction of screen height the arrow must reach before completing // fraction of screen height the arrow must reach before completing
// the slide up automatically // the slide up automatically
const ARROW_DRAG_TRESHOLD = 0.1; const ARROW_DRAG_TRESHOLD = 0.1;
@ -28,7 +28,7 @@ const SUMMARY_ICON_SIZE = 48;
// STANDARD_FADE_TIME is used when the session goes idle, while // STANDARD_FADE_TIME is used when the session goes idle, while
// SHORT_FADE_TIME is used when requesting lock explicitly from the user menu // SHORT_FADE_TIME is used when requesting lock explicitly from the user menu
const STANDARD_FADE_TIME = 10; const STANDARD_FADE_TIME = 10;
const SHORT_FADE_TIME = 2; const SHORT_FADE_TIME = 0.8;
const Clock = new Lang.Class({ const Clock = new Lang.Class({
Name: 'ScreenShieldClock', Name: 'ScreenShieldClock',
@ -257,6 +257,23 @@ const NotificationsBox = new Lang.Class({
}, },
}); });
const LockDialogGroup = new Lang.Class({
Name: 'LockDialogGroup',
Extends: St.Widget,
_init: function(params) {
this.parent(params);
},
vfunc_get_preferred_height: function(forWidth) {
return [global.screen_height, global.screen_height];
},
vfunc_get_preferred_width: function(forHeight) {
return [global.screen_width, global.screen_width];
}
});
/** /**
* To test screen shield, make sure to kill gnome-screensaver. * To test screen shield, make sure to kill gnome-screensaver.
* *
@ -277,7 +294,8 @@ const ScreenShield = new Lang.Class({
y_expand: true, y_expand: true,
reactive: true, reactive: true,
can_focus: true, can_focus: true,
layout_manager: new Clutter.BinLayout() layout_manager: new Clutter.BinLayout(),
name: 'lockScreenGroup',
}); });
this._lockScreenGroup.connect('key-release-event', this._lockScreenGroup.connect('key-release-event',
Lang.bind(this, this._onLockScreenKeyRelease)); Lang.bind(this, this._onLockScreenKeyRelease));
@ -304,9 +322,7 @@ const ScreenShield = new Lang.Class({
action.connect('drag-end', Lang.bind(this, this._onDragEnd)); action.connect('drag-end', Lang.bind(this, this._onDragEnd));
this._lockScreenGroup.add_action(action); this._lockScreenGroup.add_action(action);
this._lockDialogGroup = new St.Widget({ x_expand: true, this._lockDialogGroup = new LockDialogGroup({ name: 'lockDialogGroup' });
y_expand: true });
this.actor.add_actor(this._lockDialogGroup); this.actor.add_actor(this._lockDialogGroup);
this.actor.add_actor(this._lockScreenGroup); this.actor.add_actor(this._lockScreenGroup);
@ -478,26 +494,35 @@ const ScreenShield = new Lang.Class({
}, },
_resetLockScreen: function(animate) { _resetLockScreen: function(animate) {
this._lockScreenGroup.show();
this._arrow.show();
if (animate) { if (animate) {
this.actor.opacity = 0; this._lockScreenGroup.y = -global.screen_height;
Tweener.removeTweens(this.actor); Tweener.removeTweens(this._lockScreenGroup);
Tweener.addTween(this.actor, Tweener.addTween(this._lockScreenGroup,
{ opacity: 255, { y: 0,
time: SHORT_FADE_TIME, time: SHORT_FADE_TIME,
transition: 'easeOutQuad', transition: 'linear',
onComplete: function() { onComplete: function() {
this._lockScreenGroup.fixed_position_set = false;
this.emit('lock-screen-shown'); this.emit('lock-screen-shown');
}, },
onCompleteScope: this onCompleteScope: this
}); });
this._lockDialogGroup.opacity = 0;
Tweener.removeTweens(this._lockDialogGroup);
Tweener.addTween(this._lockDialogGroup,
{ opacity: 255,
time: SHORT_FADE_TIME,
transition: 'easeOutQuad' });
} else { } else {
this._lockScreenGroup.fixed_position_set = false;
this._lockDialogGroup.opacity = 255;
this.emit('lock-screen-shown'); this.emit('lock-screen-shown');
} }
this._lockScreenGroup.fixed_position_set = false;
this._lockScreenGroup.show();
this._arrow.show();
this._lockScreenGroup.grab_key_focus(); this._lockScreenGroup.grab_key_focus();
}, },