diff --git a/Tactility/Source/service/displayidle/DisplayIdle.cpp b/Tactility/Source/service/displayidle/DisplayIdle.cpp index 3c0c9051..0dcf7f7c 100644 --- a/Tactility/Source/service/displayidle/DisplayIdle.cpp +++ b/Tactility/Source/service/displayidle/DisplayIdle.cpp @@ -161,11 +161,18 @@ void DisplayIdleService::tick() { } uint32_t inactive_ms = 0; - inactive_ms = lv_display_get_inactive_time(nullptr); - // Only update if not stopping (prevents lag on touch) - if (displayDimmed && screensaverOverlay && !stopScreensaverRequested.load(std::memory_order_acquire)) { + // Check if MCP override is active — it must not be auto-stopped by idle logic + bool isMcpActive = false; + { + auto& st = mcp::getState(); + std::lock_guard lk(st.mutex); + isMcpActive = (st.drawArea != nullptr) || st.overrideActive; + } + + // Only update if not stopping (prevents lag on touch) — skip for MCP (no animation) + if (displayDimmed && screensaverOverlay && !stopScreensaverRequested.load(std::memory_order_acquire) && !isMcpActive) { // Check if screensaver should auto-off after 5 minutes if (!backlightOff) { screensaverActiveCounter++; @@ -199,7 +206,7 @@ void DisplayIdleService::tick() { if (supportsBacklight) { if (!cachedDisplaySettings.backlightTimeoutEnabled || cachedDisplaySettings.backlightTimeoutMs == 0) { - if (displayDimmed) { + if (displayDimmed && !isMcpActive) { display->setBacklightDuty(cachedDisplaySettings.backlightDuty); displayDimmed = false; } @@ -220,7 +227,7 @@ void DisplayIdleService::tick() { } displayDimmed = true; } - } else if (displayDimmed) { + } else if (displayDimmed && !isMcpActive) { if (inactive_ms < kWakeActivityThresholdMs) { stopScreensaver(); } else if (charging_blocks) {