mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
feat: Add independent power action confirmation settings for dms greeter
This commit is contained in:
@@ -527,6 +527,7 @@ 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"
|
||||
|
||||
@@ -350,6 +350,7 @@ 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" },
|
||||
|
||||
@@ -41,6 +41,8 @@ Singleton {
|
||||
property string lockDateFormat: ""
|
||||
property bool lockScreenShowPowerActions: true
|
||||
property bool lockScreenShowProfileImage: true
|
||||
property bool powerActionConfirmGreeter: true
|
||||
property real powerActionHoldDuration: 0.5
|
||||
property var screenPreferences: ({})
|
||||
property int animationSpeed: 2
|
||||
property string wallpaperFillMode: "Fill"
|
||||
@@ -75,6 +77,8 @@ 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;
|
||||
powerActionHoldDuration = settings.powerActionHoldDuration !== undefined ? settings.powerActionHoldDuration : 0.5;
|
||||
screenPreferences = settings.screenPreferences !== undefined ? settings.screenPreferences : ({});
|
||||
animationSpeed = settings.animationSpeed !== undefined ? settings.animationSpeed : 2;
|
||||
wallpaperFillMode = settings.wallpaperFillMode !== undefined ? settings.wallpaperFillMode : "Fill";
|
||||
|
||||
@@ -1231,6 +1231,9 @@ Item {
|
||||
LockPowerMenu {
|
||||
id: powerMenu
|
||||
showLogout: false
|
||||
useGreeterPowerSettings: true
|
||||
greeterPowerActionConfirm: GreetdSettings.powerActionConfirmGreeter
|
||||
greeterPowerActionHoldDuration: GreetdSettings.powerActionHoldDuration
|
||||
onClosed: {
|
||||
if (isPrimaryScreen && inputField && inputField.forceActiveFocus) {
|
||||
Qt.callLater(() => inputField.forceActiveFocus());
|
||||
|
||||
@@ -24,8 +24,12 @@ Rectangle {
|
||||
property real holdProgress: 0
|
||||
property bool showHoldHint: false
|
||||
|
||||
readonly property bool needsConfirmation: SettingsData.powerActionConfirm
|
||||
readonly property int holdDurationMs: SettingsData.powerActionHoldDuration * 1000
|
||||
property bool useGreeterPowerSettings: false
|
||||
property bool greeterPowerActionConfirm: true
|
||||
property real greeterPowerActionHoldDuration: 0.5
|
||||
|
||||
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)
|
||||
|
||||
signal closed
|
||||
|
||||
@@ -780,8 +784,9 @@ Rectangle {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
readonly property real totalMs: SettingsData.powerActionHoldDuration * 1000
|
||||
readonly property real totalMs: root.holdDurationMs
|
||||
readonly property int remainingMs: Math.ceil(totalMs * (1 - root.holdProgress))
|
||||
readonly property real durationSec: root.holdDurationMs / 1000
|
||||
text: {
|
||||
if (root.showHoldHint)
|
||||
return I18n.tr("Hold longer to confirm");
|
||||
@@ -792,7 +797,7 @@ Rectangle {
|
||||
}
|
||||
if (totalMs < 1000)
|
||||
return I18n.tr("Hold to confirm (%1 ms)").arg(totalMs);
|
||||
return I18n.tr("Hold to confirm (%1s)").arg(SettingsData.powerActionHoldDuration);
|
||||
return I18n.tr("Hold to confirm (%1s)").arg(durationSec);
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: root.showHoldHint ? Theme.warning : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.6)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import QtQuick
|
||||
import Quickshell.Io
|
||||
import qs.Common
|
||||
import qs.Services
|
||||
import qs.Widgets
|
||||
@@ -7,6 +8,17 @@ 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]
|
||||
|
||||
@@ -475,6 +487,16 @@ 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"
|
||||
@@ -484,7 +506,7 @@ Item {
|
||||
|
||||
text: I18n.tr("Hold Duration")
|
||||
options: durationOptions
|
||||
visible: SettingsData.powerActionConfirm
|
||||
visible: SettingsData.powerActionConfirm || SettingsData.powerActionConfirmGreeter
|
||||
|
||||
Component.onCompleted: {
|
||||
const currentDuration = SettingsData.powerActionHoldDuration;
|
||||
|
||||
@@ -5776,6 +5776,26 @@
|
||||
],
|
||||
"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",
|
||||
|
||||
Reference in New Issue
Block a user