Treat idle timeout 0 as disabled, not immediate
idle.screensaver / idle.lock of 0 was included in Math.min(), so IdleMonitor's timeout became 0. Releasing a Wayland idle inhibitor (SDL's default screensaver inhibit) then reported idle immediately and locked the session even when lock had been "disabled" by setting it to 0. Treat 0 as disabled when computing the first idle deadline, do not start the corresponding action, and leave IdleMonitor off when both timeouts are 0. Fixes #10860
This commit is contained in:
1 parent
60663faf87
commit
14921a956e
3 files changed
+62
-10
No files matched your search
@@ -20,9 +20,12 @@ Item {
|
||||
? shell.shellConfig.idle : (shell && shell.idleConfig ? shell.idleConfig : ({}))
|
||||
readonly property int screensaverTimeoutSeconds: secondsFromConfig(idleConfig.screensaver, defaultScreensaverSeconds)
|
||||
readonly property int lockTimeoutSeconds: secondsFromConfig(idleConfig.lock, defaultLockSeconds)
|
||||
readonly property int firstIdleTimeoutSeconds: Math.min(screensaverTimeoutSeconds, lockTimeoutSeconds)
|
||||
readonly property int screensaverDelaySeconds: Math.max(0, screensaverTimeoutSeconds - firstIdleTimeoutSeconds)
|
||||
readonly property int lockDelaySeconds: Math.max(0, lockTimeoutSeconds - firstIdleTimeoutSeconds)
|
||||
readonly property bool screensaverEnabled: screensaverTimeoutSeconds > 0
|
||||
readonly property bool lockEnabled: lockTimeoutSeconds > 0
|
||||
readonly property bool idleTimersEnabled: screensaverEnabled || lockEnabled
|
||||
readonly property int firstIdleTimeoutSeconds: IdleModel.firstIdleTimeout(screensaverTimeoutSeconds, lockTimeoutSeconds)
|
||||
readonly property int screensaverDelaySeconds: IdleModel.delayAfterFirstIdle(screensaverTimeoutSeconds, firstIdleTimeoutSeconds)
|
||||
readonly property int lockDelaySeconds: IdleModel.delayAfterFirstIdle(lockTimeoutSeconds, firstIdleTimeoutSeconds)
|
||||
readonly property bool idleEnabled: stayAwakeStateLoaded && !stayAwake
|
||||
readonly property string screensaverClass: "org.omarchy.screensaver"
|
||||
|
||||
@@ -91,11 +94,15 @@ Item {
|
||||
root.screensaverStartedThisCycle = false
|
||||
resetScreensaverWindows()
|
||||
|
||||
if (root.screensaverDelaySeconds === 0) launchScreensaver()
|
||||
else screensaverTimer.restart()
|
||||
if (root.screensaverEnabled) {
|
||||
if (root.screensaverDelaySeconds === 0) launchScreensaver()
|
||||
else screensaverTimer.restart()
|
||||
}
|
||||
|
||||
if (root.lockDelaySeconds === 0) lockSystem("lock-timeout-immediate")
|
||||
else lockTimer.restart()
|
||||
if (root.lockEnabled) {
|
||||
if (root.lockDelaySeconds === 0) lockSystem("lock-timeout-immediate")
|
||||
else lockTimer.restart()
|
||||
}
|
||||
}
|
||||
|
||||
function cancelIdleCycle(reason) {
|
||||
@@ -172,7 +179,7 @@ Item {
|
||||
|
||||
function handleIdleChanged() {
|
||||
logEvent("idle-monitor", idleMonitor.isIdle ? "idle" : "active")
|
||||
if (!root.idleEnabled) return
|
||||
if (!root.idleEnabled || !root.idleTimersEnabled) return
|
||||
|
||||
if (idleMonitor.isIdle) startIdleCycle()
|
||||
else handleActiveSignal()
|
||||
@@ -250,8 +257,8 @@ Item {
|
||||
|
||||
IdleMonitor {
|
||||
id: idleMonitor
|
||||
enabled: root.idleEnabled
|
||||
timeout: root.firstIdleTimeoutSeconds
|
||||
enabled: root.idleEnabled && root.idleTimersEnabled
|
||||
timeout: Math.max(1, root.firstIdleTimeoutSeconds)
|
||||
respectInhibitors: true
|
||||
onIsIdleChanged: root.handleIdleChanged()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user