From 193b664c7daa2ea7707e8b7fba03afe07e2cbd2a Mon Sep 17 00:00:00 2001 From: Joan Torres Lopez Date: Tue, 15 Jul 2025 11:27:01 +0200 Subject: [PATCH] systemActions: Optionally allow restart/shutdown on lock screen Support the new 'restart-enabled' setting from 'org.gnome.desktop.screensaver' to optionally allow restart/shutdown from the lock screen. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1584 Part-of: --- js/misc/systemActions.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js index 10cab9a..9d3e09c 100644 --- a/js/misc/systemActions.js +++ b/js/misc/systemActions.js @@ -7,10 +7,12 @@ const Main = imports.ui.main; const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown'; const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen'; +const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver'; const DISABLE_USER_SWITCH_KEY = 'disable-user-switching'; const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen'; const DISABLE_LOG_OUT_KEY = 'disable-log-out'; const DISABLE_RESTART_KEY = 'disable-restart-buttons'; +const RESTART_ENABLED_KEY = 'restart-enabled'; const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out'; const POWER_OFF_ACTION_ID = 'power-off'; @@ -136,6 +138,7 @@ const SystemActions = GObject.registerClass({ this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' }); + this._screenSaverSettings = new Gio.Settings({schema_id: SCREENSAVER_SCHEMA}); this._session = new GnomeSession.SessionManager(); this._loginManager = LoginManager.getLoginManager(); @@ -165,6 +168,9 @@ const SystemActions = GObject.registerClass({ this._lockdownSettings.connect('changed::%s'.format(DISABLE_LOG_OUT_KEY), () => this._updateHaveShutdown()); + this._screenSaverSettings.connect(`changed::${RESTART_ENABLED_KEY}`, + () => this._updateHaveShutdown()); + this.forceUpdate(); this._orientationSettings.connect('changed::orientation-lock', () => { @@ -327,7 +333,8 @@ const SystemActions = GObject.registerClass({ } _updatePowerOff() { - let disabled = Main.sessionMode.isLocked || + let disabled = (Main.sessionMode.isLocked && + !this._screenSaverSettings.get_boolean(RESTART_ENABLED_KEY)) || (Main.sessionMode.isGreeter && this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY)); this._actions.get(POWER_OFF_ACTION_ID).available = this._canHavePowerOff && !disabled; -- 2.49.0