status/system: Fix session submenu visibility

Commit 147a743d8d moved the suspend and power-off actions into
the submenu that contains the log-out and switch-user actions,
but did not update the submenu visibility logic to account for
the additional actions.

As a result, the submenu is hidden when log-out and switch-user
are unavailable (like on the login screen), even if suspend and
power-off are enabled.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2169
This commit is contained in:
Florian Müllner 2020-02-04 02:35:43 +01:00 committed by Georges Basile Stavracas Neto
parent e16c64dbdd
commit a205f4e249

View File

@ -20,9 +20,13 @@ class Indicator extends PanelMenu.SystemIndicator {
this._createSubMenu(); this._createSubMenu();
this._loginScreenItem.connect('notify::visible', this._loginScreenItem.connect('notify::visible',
() => this._updateMultiUser()); () => this._updateSessionSubMenu());
this._logoutItem.connect('notify::visible', this._logoutItem.connect('notify::visible',
() => this._updateMultiUser()); () => this._updateSessionSubMenu());
this._suspendItem.connect('notify::visible',
() => this._updateSessionSubMenu());
this._powerOffItem.connect('notify::visible',
() => this._updateSessionSubMenu());
// Whether shutdown is available or not depends on both lockdown // Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't // settings (disable-log-out) and Polkit policy - the latter doesn't
// notify, so we update the menu item each time the menu opens or // notify, so we update the menu item each time the menu opens or
@ -33,7 +37,7 @@ class Indicator extends PanelMenu.SystemIndicator {
this._systemActions.forceUpdate(); this._systemActions.forceUpdate();
}); });
this._updateMultiUser(); this._updateSessionSubMenu();
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
@ -43,11 +47,12 @@ class Indicator extends PanelMenu.SystemIndicator {
this._settingsItem.visible = Main.sessionMode.allowSettings; this._settingsItem.visible = Main.sessionMode.allowSettings;
} }
_updateMultiUser() { _updateSessionSubMenu() {
let hasSwitchUser = this._loginScreenItem.visible; this._sessionSubMenu.visible =
let hasLogout = this._logoutItem.visible; this._loginScreenItem.visible ||
this._logoutItem.visible ||
this._sessionSubMenu.visible = hasSwitchUser || hasLogout; this._suspendItem.visible ||
this._powerOffItem.visible;
} }
_createSubMenu() { _createSubMenu() {