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
@@ -5,11 +5,34 @@ set -euo pipefail
|
||||
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
||||
|
||||
run_node_test <<'JS'
|
||||
const fs = require('fs')
|
||||
const idle = requireFromRoot('shell/plugins/services/idle/IdleModel.js')
|
||||
const serviceSource = fs.readFileSync(root + '/shell/plugins/services/idle/Service.qml', 'utf8')
|
||||
|
||||
assertEqual(idle.secondsFromConfig('42.9', 10), 42, 'idle floors configured seconds')
|
||||
assertEqual(idle.secondsFromConfig('-1', 10), 10, 'idle rejects negative seconds')
|
||||
assertEqual(idle.secondsFromConfig('nope', 10), 10, 'idle rejects invalid seconds')
|
||||
assertEqual(idle.secondsFromConfig(0, 300), 0, 'idle keeps an explicit zero timeout')
|
||||
assertEqual(idle.firstIdleTimeout(150, 300), 150, 'idle uses the sooner of screensaver and lock')
|
||||
assertEqual(idle.firstIdleTimeout(0, 300), 300, 'idle ignores a disabled screensaver when computing first idle')
|
||||
assertEqual(idle.firstIdleTimeout(150, 0), 150, 'idle ignores a disabled lock when computing first idle')
|
||||
assertEqual(idle.firstIdleTimeout(0, 0), 0, 'idle has no first-idle timeout when both actions are disabled')
|
||||
assertEqual(idle.delayAfterFirstIdle(300, 150), 150, 'idle delays lock until its own timeout')
|
||||
assertEqual(idle.delayAfterFirstIdle(150, 150), 0, 'idle fires an action immediately when it is the first timeout')
|
||||
assertEqual(idle.delayAfterFirstIdle(0, 150), 0, 'idle does not schedule a disabled action')
|
||||
|
||||
assert(
|
||||
serviceSource.includes('IdleModel.firstIdleTimeout(screensaverTimeoutSeconds, lockTimeoutSeconds)'),
|
||||
'idle ignores a zero timeout when computing the first idle deadline'
|
||||
)
|
||||
assert(
|
||||
/enabled: root\.idleEnabled && root\.idleTimersEnabled/.test(serviceSource),
|
||||
'idle monitor is off when both screensaver and lock are disabled'
|
||||
)
|
||||
assert(
|
||||
/if \(root\.lockEnabled\) \{\s*\n\s*if \(root\.lockDelaySeconds === 0\) lockSystem/.test(serviceSource),
|
||||
'idle does not lock immediately when lock timeout is disabled'
|
||||
)
|
||||
|
||||
assertDeepEqual(idle.eventParts({ data: 'a,b,c' }, 2), ['a', 'b', 'c'], 'idle parses raw event data')
|
||||
assertDeepEqual(
|
||||
|
||||
Reference in new issue
Block a user