diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js index b9bba1036..2d3b9b84b 100644 --- a/js/ui/status/bluetooth.js +++ b/js/ui/status/bluetooth.js @@ -416,7 +416,8 @@ const PinNotification = new Lang.Class({ this._entry.connect('key-release-event', Lang.bind(this, function(entry, event) { let key = event.get_key_symbol(); if (key == Clutter.KEY_Return) { - this.emit('action-invoked', 'ok'); + if (this._canActivateOkButton()) + this.emit('action-invoked', 'ok'); return true; } else if (key == Clutter.KEY_Escape) { this.emit('action-invoked', 'cancel'); @@ -429,6 +430,12 @@ const PinNotification = new Lang.Class({ this.addButton('ok', _("OK")); this.addButton('cancel', _("Cancel")); + this.setButtonSensitive('ok', this._canActivateOkButton()); + this._entry.clutter_text.connect('text-changed', Lang.bind(this, + function() { + this.setButtonSensitive('ok', this._canActivateOkButton()); + })); + this.connect('action-invoked', Lang.bind(this, function(self, action) { if (action == 'ok') { if (this._numeric) { @@ -451,6 +458,11 @@ const PinNotification = new Lang.Class({ })); }, + _canActivateOkButton: function() { + // PINs have a fixed length of 6 + return this._entry.clutter_text.text.length == 6; + }, + grabFocus: function(lockTray) { this.parent(lockTray); global.stage.set_key_focus(this._entry);