SessionMenuTab: add per entry countdown toggle (implements #746

)
This commit is contained in:
Ly-sec
2025-11-15 13:48:39 +01:00
parent 79b079a436
commit 7176e890af
2 changed files with 298 additions and 23 deletions
+45 -4
View File
@@ -88,7 +88,7 @@ SmartPanel {
}
// Build powerOptions from settings, filtering enabled ones and adding metadata
readonly property var powerOptions: (function () {
property var powerOptions: {
var options = []
var settingsOptions = Settings.data.sessionMenu.powerOptions || []
@@ -100,13 +100,39 @@ SmartPanel {
"action": settingOption.action,
"icon": metadata.icon,
"title": metadata.title,
"isShutdown": metadata.isShutdown
"isShutdown": metadata.isShutdown,
"countdownEnabled": settingOption.countdownEnabled !== undefined ? settingOption.countdownEnabled : true
})
}
}
return options
})()
}
// Update powerOptions when settings change
Connections {
target: Settings.data.sessionMenu
function onPowerOptionsChanged() {
var options = []
var settingsOptions = Settings.data.sessionMenu.powerOptions || []
for (var i = 0; i < settingsOptions.length; i++) {
var settingOption = settingsOptions[i]
if (settingOption.enabled && actionMetadata[settingOption.action]) {
var metadata = actionMetadata[settingOption.action]
options.push({
"action": settingOption.action,
"icon": metadata.icon,
"title": metadata.title,
"isShutdown": metadata.isShutdown,
"countdownEnabled": settingOption.countdownEnabled !== undefined ? settingOption.countdownEnabled : true
})
}
}
root.powerOptions = options
}
}
// Lifecycle handlers
onOpened: {
@@ -120,12 +146,27 @@ SmartPanel {
// Timer management
function startTimer(action) {
// If countdown is disabled, execute immediately
// Check if global countdown is disabled
if (!Settings.data.sessionMenu.enableCountdown) {
executeAction(action)
return
}
// Check per-item countdown setting
var option = null
for (var i = 0; i < powerOptions.length; i++) {
if (powerOptions[i].action === action) {
option = powerOptions[i]
break
}
}
// If this specific action has countdown disabled, execute immediately
if (option && option.countdownEnabled === false) {
executeAction(action)
return
}
if (timerActive && pendingAction === action) {
// Second click - execute immediately
executeAction(action)