ScreenShield: properly handle ensureUnlockDialog() failure

If that fails (which only ever happens in initial-setup mode, which
has no unlock or login dialog), we don't want to go ahead with
whatever we were doing.

https://bugzilla.gnome.org/show_bug.cgi?id=701848
This commit is contained in:
Giovanni Campagna 2013-06-08 16:03:14 +02:00
parent 30ff15ec0b
commit 99af697cd7

View File

@ -583,8 +583,8 @@ const ScreenShield = new Lang.Class({
_liftShield: function(onPrimary, velocity) { _liftShield: function(onPrimary, velocity) {
if (this._isLocked) { if (this._isLocked) {
this._ensureUnlockDialog(onPrimary, true /* allowCancel */); if (this._ensureUnlockDialog(onPrimary, true /* allowCancel */))
this._hideLockScreen(true /* animate */, velocity); this._hideLockScreen(true /* animate */, velocity);
} else { } else {
this.deactivate(true /* animate */); this.deactivate(true /* animate */);
} }
@ -621,9 +621,8 @@ const ScreenShield = new Lang.Class({
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape)) if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
return false; return false;
this._ensureUnlockDialog(true, true); if (this._ensureUnlockDialog(true, true) &&
GLib.unichar_isgraph(unichar))
if (GLib.unichar_isgraph(unichar))
this._dialog.addCharacter(unichar); this._dialog.addCharacter(unichar);
this._liftShield(true, 0); this._liftShield(true, 0);
@ -864,8 +863,8 @@ const ScreenShield = new Lang.Class({
this.actor.show(); this.actor.show();
this._isGreeter = Main.sessionMode.isGreeter; this._isGreeter = Main.sessionMode.isGreeter;
this._isLocked = true; this._isLocked = true;
this._ensureUnlockDialog(true, true); if (this._ensureUnlockDialog(true, true))
this._hideLockScreen(false, 0); this._hideLockScreen(false, 0);
}, },
_hideLockScreenComplete: function() { _hideLockScreenComplete: function() {
@ -915,7 +914,7 @@ const ScreenShield = new Lang.Class({
if (!constructor) { if (!constructor) {
// This session mode has no locking capabilities // This session mode has no locking capabilities
this.deactivate(true); this.deactivate(true);
return; return false;
} }
this._dialog = new constructor(this._lockDialogGroup); this._dialog = new constructor(this._lockDialogGroup);
@ -927,12 +926,14 @@ const ScreenShield = new Lang.Class({
// by the time we reach this... // by the time we reach this...
log('Could not open login dialog: failed to acquire grab'); log('Could not open login dialog: failed to acquire grab');
this.deactivate(true); this.deactivate(true);
return false;
} }
this._dialog.connect('failed', Lang.bind(this, this._onUnlockFailed)); this._dialog.connect('failed', Lang.bind(this, this._onUnlockFailed));
} }
this._dialog.allowCancel = allowCancel; this._dialog.allowCancel = allowCancel;
return true;
}, },
_onUnlockFailed: function() { _onUnlockFailed: function() {