From 6f19d1bcd595f84c3dd263b0ab983584cecf8099 Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Wed, 6 May 2026 05:35:37 +0000 Subject: [PATCH] fix: screensaver watcher not activated when enabled from settings UI initInactivityWatcher() was called once at startup and returned early if screensaver was disabled at that moment. Enabling it later from the settings panel had no effect until page reload. - Make initInactivityWatcher() idempotent: attach DOM listeners only once (flag _inactivityListenersAttached), check screensaver_enabled dynamically inside each handler so disabling/enabling is reflected immediately - Call initInactivityWatcher() at end of saveSettings() so the inactivity timer starts immediately when user enables screensaver --- assets/js/app.js | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 3e0e0e6..25e563f 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -2239,6 +2239,8 @@ async function saveSettings() { statusEl.style.display = 'block'; setTimeout(() => statusEl.style.display = 'none', 4000); } + // Re-init screensaver watcher in case it was just enabled + initInactivityWatcher(); } function switchSettingsTab(btn, tabId) { @@ -11890,20 +11892,26 @@ function initScreensaverShortcuts() { _initScreensaverShortcutBtn('screensaver-recipe-btn', 'recipe', null); } +let _inactivityListenersAttached = false; + function initInactivityWatcher() { - const s = getSettings(); - if (!s.screensaver_enabled) return; // disabled by default - const events = ['pointerdown', 'pointermove', 'keydown', 'scroll', 'touchstart']; - events.forEach(evt => { - document.addEventListener(evt, () => { - if (_screensaverActive) { - dismissScreensaver(); - } else { - resetInactivityTimer(); - } - }, { passive: true }); - }); - resetInactivityTimer(); + if (!_inactivityListenersAttached) { + const events = ['pointerdown', 'pointermove', 'keydown', 'scroll', 'touchstart']; + events.forEach(evt => { + document.addEventListener(evt, () => { + if (!getSettings().screensaver_enabled) return; + if (_screensaverActive) { + dismissScreensaver(); + } else { + resetInactivityTimer(); + } + }, { passive: true }); + }); + _inactivityListenersAttached = true; + } + if (getSettings().screensaver_enabled) { + resetInactivityTimer(); + } } // ===== INITIALIZATION =====