diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index 28b9851a5..0476375f5 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -115,6 +115,12 @@ const Button = new Lang.Class({ this.setName(nameText); }, + setSensitive: function(sensitive) { + this.actor.reactive = sensitive; + this.actor.can_focus = sensitive; + this.actor.track_hover = sensitive; + }, + setName: function(text) { if (text != null) { // This is the easiest way to provide a accessible name to diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js index 572864312..62c6da62e 100644 --- a/js/ui/sessionMode.js +++ b/js/ui/sessionMode.js @@ -36,6 +36,7 @@ const _modes = { hasRunDialog: false, hasWorkspaces: false, hasWindows: false, + isLocked: true, components: ['networkAgent', 'polkitAgent', 'telepathyClient'], panel: { left: ['userMenu'], @@ -68,6 +69,7 @@ const _modes = { hasWorkspaces: true, hasWindows: true, createUnlockDialog: Main.createSessionUnlockDialog, + isLocked: false, components: ['networkAgent', 'polkitAgent', 'telepathyClient', 'keyring', 'recorder', 'autorunManager', 'automountManager'], panel: { diff --git a/js/ui/userMenu.js b/js/ui/userMenu.js index 49b22261c..bb3e1a5d9 100644 --- a/js/ui/userMenu.js +++ b/js/ui/userMenu.js @@ -505,6 +505,8 @@ const UserMenuButton = new Lang.Class({ style_class: 'popup-menu-icon' }); this._pendingIcon = new St.Icon({ icon_name: 'user-status-pending-symbolic', style_class: 'popup-menu-icon' }); + this._lockedIcon = new St.Icon({ icon_name: 'changes-prevent-symbolic', + style_class: 'popup-menu-icon' }); this._accountMgr.connect('most-available-presence-changed', Lang.bind(this, this._updatePresenceIcon)); @@ -578,6 +580,9 @@ const UserMenuButton = new Lang.Class({ let allowSettings = Main.sessionMode.allowSettings; this._statusChooser.setSensitive(allowSettings); this._systemSettings.visible = allowSettings; + + this.setSensitive(!Main.sessionMode.isLocked); + this._updatePresenceIcon(); }, _onDestroy: function() { @@ -661,7 +666,9 @@ const UserMenuButton = new Lang.Class({ }, _updatePresenceIcon: function(accountMgr, presence, status, message) { - if (presence == Tp.ConnectionPresenceType.AVAILABLE) + if (Main.sessionMode.isLocked) + this._iconBox.child = this._lockedIcon; + else if (presence == Tp.ConnectionPresenceType.AVAILABLE) this._iconBox.child = this._availableIcon; else if (presence == Tp.ConnectionPresenceType.BUSY) this._iconBox.child = this._busyIcon;