From 8271d8423dabeff98c3b3466707fc1e5be8c85da Mon Sep 17 00:00:00 2001 From: bbedward Date: Wed, 25 Feb 2026 14:50:06 -0500 Subject: [PATCH] greeter: sync power menu options --- quickshell/Common/SettingsData.qml | 1 - quickshell/Common/settings/SettingsSpec.js | 1 - quickshell/Modules/Greetd/GreetdSettings.qml | 10 ++++++-- quickshell/Modules/Greetd/GreeterContent.qml | 9 ++++--- quickshell/Modules/Lock/LockPowerMenu.qml | 24 ++++++++++++------- quickshell/Modules/Settings/PowerSleepTab.qml | 24 +------------------ .../translations/settings_search_index.json | 20 ---------------- 7 files changed, 31 insertions(+), 58 deletions(-) diff --git a/quickshell/Common/SettingsData.qml b/quickshell/Common/SettingsData.qml index 7d74fba0..edc3087d 100644 --- a/quickshell/Common/SettingsData.qml +++ b/quickshell/Common/SettingsData.qml @@ -527,7 +527,6 @@ Singleton { property bool osdAudioOutputEnabled: true property bool powerActionConfirm: true - property bool powerActionConfirmGreeter: true property real powerActionHoldDuration: 0.5 property var powerMenuActions: ["reboot", "logout", "poweroff", "lock", "suspend", "restart"] property string powerMenuDefaultAction: "logout" diff --git a/quickshell/Common/settings/SettingsSpec.js b/quickshell/Common/settings/SettingsSpec.js index 1d983664..d347e271 100644 --- a/quickshell/Common/settings/SettingsSpec.js +++ b/quickshell/Common/settings/SettingsSpec.js @@ -350,7 +350,6 @@ var SPEC = { osdAudioOutputEnabled: { def: true }, powerActionConfirm: { def: true }, - powerActionConfirmGreeter: { def: true }, powerActionHoldDuration: { def: 0.5 }, powerMenuActions: { def: ["reboot", "logout", "poweroff", "lock", "suspend", "restart"] }, powerMenuDefaultAction: { def: "logout" }, diff --git a/quickshell/Modules/Greetd/GreetdSettings.qml b/quickshell/Modules/Greetd/GreetdSettings.qml index e29fbb2b..79688a2d 100644 --- a/quickshell/Modules/Greetd/GreetdSettings.qml +++ b/quickshell/Modules/Greetd/GreetdSettings.qml @@ -41,8 +41,11 @@ Singleton { property string lockDateFormat: "" property bool lockScreenShowPowerActions: true property bool lockScreenShowProfileImage: true - property bool powerActionConfirmGreeter: true + property bool powerActionConfirm: true property real powerActionHoldDuration: 0.5 + property var powerMenuActions: ["reboot", "logout", "poweroff", "lock", "suspend", "restart"] + property string powerMenuDefaultAction: "logout" + property bool powerMenuGridLayout: false property var screenPreferences: ({}) property int animationSpeed: 2 property string wallpaperFillMode: "Fill" @@ -77,8 +80,11 @@ Singleton { lockDateFormat = settings.lockDateFormat !== undefined ? settings.lockDateFormat : ""; lockScreenShowPowerActions = settings.lockScreenShowPowerActions !== undefined ? settings.lockScreenShowPowerActions : true; lockScreenShowProfileImage = settings.lockScreenShowProfileImage !== undefined ? settings.lockScreenShowProfileImage : true; - powerActionConfirmGreeter = settings.powerActionConfirmGreeter !== undefined ? settings.powerActionConfirmGreeter : true; + powerActionConfirm = settings.powerActionConfirm !== undefined ? settings.powerActionConfirm : true; powerActionHoldDuration = settings.powerActionHoldDuration !== undefined ? settings.powerActionHoldDuration : 0.5; + powerMenuActions = settings.powerMenuActions !== undefined ? settings.powerMenuActions : ["reboot", "logout", "poweroff", "lock", "suspend", "restart"]; + powerMenuDefaultAction = settings.powerMenuDefaultAction !== undefined ? settings.powerMenuDefaultAction : "logout"; + powerMenuGridLayout = settings.powerMenuGridLayout !== undefined ? settings.powerMenuGridLayout : false; screenPreferences = settings.screenPreferences !== undefined ? settings.screenPreferences : ({}); animationSpeed = settings.animationSpeed !== undefined ? settings.animationSpeed : 2; wallpaperFillMode = settings.wallpaperFillMode !== undefined ? settings.wallpaperFillMode : "Fill"; diff --git a/quickshell/Modules/Greetd/GreeterContent.qml b/quickshell/Modules/Greetd/GreeterContent.qml index e491b729..b494298a 100644 --- a/quickshell/Modules/Greetd/GreeterContent.qml +++ b/quickshell/Modules/Greetd/GreeterContent.qml @@ -1231,9 +1231,12 @@ Item { LockPowerMenu { id: powerMenu showLogout: false - useGreeterPowerSettings: true - greeterPowerActionConfirm: GreetdSettings.powerActionConfirmGreeter - greeterPowerActionHoldDuration: GreetdSettings.powerActionHoldDuration + powerActionConfirmOverride: GreetdSettings.powerActionConfirm + powerActionHoldDurationOverride: GreetdSettings.powerActionHoldDuration + powerMenuActionsOverride: GreetdSettings.powerMenuActions + powerMenuDefaultActionOverride: GreetdSettings.powerMenuDefaultAction + powerMenuGridLayoutOverride: GreetdSettings.powerMenuGridLayout + requiredActions: ["poweroff"] onClosed: { if (isPrimaryScreen && inputField && inputField.forceActiveFocus) { Qt.callLater(() => inputField.forceActiveFocus()); diff --git a/quickshell/Modules/Lock/LockPowerMenu.qml b/quickshell/Modules/Lock/LockPowerMenu.qml index a9ad89e7..0a0ee849 100644 --- a/quickshell/Modules/Lock/LockPowerMenu.qml +++ b/quickshell/Modules/Lock/LockPowerMenu.qml @@ -24,17 +24,20 @@ Rectangle { property real holdProgress: 0 property bool showHoldHint: false - property bool useGreeterPowerSettings: false - property bool greeterPowerActionConfirm: true - property real greeterPowerActionHoldDuration: 0.5 + property var powerActionConfirmOverride: undefined + property var powerActionHoldDurationOverride: undefined + property var powerMenuActionsOverride: undefined + property var powerMenuDefaultActionOverride: undefined + property var powerMenuGridLayoutOverride: undefined + property var requiredActions: [] - readonly property bool needsConfirmation: useGreeterPowerSettings ? greeterPowerActionConfirm : (typeof SettingsData !== "undefined" && SettingsData.powerActionConfirm) - readonly property int holdDurationMs: useGreeterPowerSettings ? (greeterPowerActionHoldDuration * 1000) : ((typeof SettingsData !== "undefined" ? SettingsData.powerActionHoldDuration : 0.5) * 1000) + readonly property bool needsConfirmation: powerActionConfirmOverride !== undefined ? powerActionConfirmOverride : SettingsData.powerActionConfirm + readonly property int holdDurationMs: (powerActionHoldDurationOverride !== undefined ? powerActionHoldDurationOverride : SettingsData.powerActionHoldDuration) * 1000 signal closed function updateVisibleActions() { - const allActions = (typeof SettingsData !== "undefined" && SettingsData.powerMenuActions) ? SettingsData.powerMenuActions : ["logout", "suspend", "hibernate", "reboot", "poweroff"]; + const allActions = powerMenuActionsOverride !== undefined ? powerMenuActionsOverride : ((typeof SettingsData !== "undefined" && SettingsData.powerMenuActions) ? SettingsData.powerMenuActions : ["logout", "suspend", "hibernate", "reboot", "poweroff"]); const hibernateSupported = (typeof SessionService !== "undefined" && SessionService.hibernateSupported) || false; let filtered = allActions.filter(action => { if (action === "hibernate" && !hibernateSupported) @@ -48,9 +51,14 @@ Rectangle { return true; }); + for (const action of requiredActions) { + if (!filtered.includes(action)) + filtered.push(action); + } + visibleActions = filtered; - useGridLayout = (typeof SettingsData !== "undefined" && SettingsData.powerMenuGridLayout !== undefined) ? SettingsData.powerMenuGridLayout : false; + useGridLayout = powerMenuGridLayoutOverride !== undefined ? powerMenuGridLayoutOverride : ((typeof SettingsData !== "undefined" && SettingsData.powerMenuGridLayout !== undefined) ? SettingsData.powerMenuGridLayout : false); if (!useGridLayout) return; const count = visibleActions.length; @@ -77,7 +85,7 @@ Rectangle { } function getDefaultActionIndex() { - const defaultAction = (typeof SettingsData !== "undefined" && SettingsData.powerMenuDefaultAction) ? SettingsData.powerMenuDefaultAction : "suspend"; + const defaultAction = powerMenuDefaultActionOverride !== undefined ? powerMenuDefaultActionOverride : ((typeof SettingsData !== "undefined" && SettingsData.powerMenuDefaultAction) ? SettingsData.powerMenuDefaultAction : "suspend"); const index = visibleActions.indexOf(defaultAction); return index >= 0 ? index : 0; } diff --git a/quickshell/Modules/Settings/PowerSleepTab.qml b/quickshell/Modules/Settings/PowerSleepTab.qml index 2914479d..7282d342 100644 --- a/quickshell/Modules/Settings/PowerSleepTab.qml +++ b/quickshell/Modules/Settings/PowerSleepTab.qml @@ -1,5 +1,4 @@ import QtQuick -import Quickshell.Io import qs.Common import qs.Services import qs.Widgets @@ -8,17 +7,6 @@ import qs.Modules.Settings.Widgets Item { id: root - property bool greeterInstalled: false - - Process { - id: greeterCheck - command: ["sh", "-c", "command -v dms-greeter 2>/dev/null || [ -f /usr/share/quickshell/dms-greeter/shell.qml ]"] - running: false - onExited: exitCode => root.greeterInstalled = exitCode === 0 - } - - Component.onCompleted: greeterCheck.running = true - readonly property var timeoutOptions: [I18n.tr("Never"), I18n.tr("1 minute"), I18n.tr("2 minutes"), I18n.tr("3 minutes"), I18n.tr("5 minutes"), I18n.tr("10 minutes"), I18n.tr("15 minutes"), I18n.tr("20 minutes"), I18n.tr("30 minutes"), I18n.tr("1 hour"), I18n.tr("1 hour 30 minutes"), I18n.tr("2 hours"), I18n.tr("3 hours")] readonly property var timeoutValues: [0, 60, 120, 180, 300, 600, 900, 1200, 1800, 3600, 5400, 7200, 10800] @@ -487,16 +475,6 @@ Item { onToggled: checked => SettingsData.set("powerActionConfirm", checked) } - SettingsToggleRow { - settingKey: "powerActionConfirmGreeter" - tags: ["power", "confirm", "hold", "greeter", "login", "screen"] - text: I18n.tr("Hold to Confirm Power Actions on the Login Screen") - description: I18n.tr("Require holding to confirm power off, restart, suspend and hibernate on the DMS Greeter login screen") - checked: SettingsData.powerActionConfirmGreeter - visible: root.greeterInstalled - onToggled: checked => SettingsData.set("powerActionConfirmGreeter", checked) - } - SettingsDropdownRow { id: holdDurationDropdown settingKey: "powerActionHoldDuration" @@ -506,7 +484,7 @@ Item { text: I18n.tr("Hold Duration") options: durationOptions - visible: SettingsData.powerActionConfirm || SettingsData.powerActionConfirmGreeter + visible: SettingsData.powerActionConfirm Component.onCompleted: { const currentDuration = SettingsData.powerActionHoldDuration; diff --git a/quickshell/translations/settings_search_index.json b/quickshell/translations/settings_search_index.json index cdf2411f..f3820ff4 100644 --- a/quickshell/translations/settings_search_index.json +++ b/quickshell/translations/settings_search_index.json @@ -5776,26 +5776,6 @@ ], "description": "Require holding button/key to confirm power off, restart, suspend, hibernate and logout" }, - { - "section": "powerActionConfirmGreeter", - "label": "Hold to confirm on login screen", - "tabIndex": 21, - "category": "Power & Sleep", - "keywords": [ - "confirm", - "greeter", - "hold", - "holding", - "login", - "power", - "reboot", - "restart", - "screen", - "shutdown", - "suspend" - ], - "description": "Require holding to confirm power off, restart, suspend and hibernate on the greetd login screen" - }, { "section": "idleSettings", "label": "Idle Settings",