diff --git a/src/plugin-qt/power/session/powersaveplan.cpp b/src/plugin-qt/power/session/powersaveplan.cpp index dc08621..50786cf 100644 --- a/src/plugin-qt/power/session/powersaveplan.cpp +++ b/src/plugin-qt/power/session/powersaveplan.cpp @@ -124,14 +124,24 @@ void PowerSavePlan::Update(int screenSaverStartDelay, int lockDelay, } } - setScreenSaverTimeout(min); - + + bool isIdle = false; + if (m_powerManager) { + auto *iw = m_powerManager->idleWatcher(); + isIdle = iw && iw->isIdle(); + } + for (auto &t : m_metaTasks) { - int nSecs = t.delay - min; - t.realDelay = nSecs > 0 ? nSecs * 1000 : 1; + if (isIdle) { // 已经处于 idleon 状态的update(可能是插拔电源或者用户重新设置延迟), 重排任务 + t.realDelay = t.delay > 0 ? t.delay * 1000 : 1; + } else { // 到达 idleOn 后立即执行动作 + int nSecs = t.delay - min; + t.realDelay = nSecs > 0 ? nSecs * 1000 : 1; + } } - - if (m_isIdle) { + + setScreenSaverTimeout(min); + if (isIdle) { HandleIdleOn(); } } @@ -149,8 +159,6 @@ void PowerSavePlan::HandleIdleOn() return; } - m_isIdle = true; - for (const auto &t : m_metaTasks) { scheduleTask(t); } @@ -162,7 +170,6 @@ void PowerSavePlan::HandleIdleOn() void PowerSavePlan::HandleIdleOff() { qDebug(logPowerSession) << "HandleIdleOff"; - m_isIdle = false; interruptTasks(); if (!m_powerManager) return; m_powerManager->SetPrepareSuspend(static_cast(PS_Normal)); @@ -174,7 +181,7 @@ void PowerSavePlan::HandleIdleOff() void PowerSavePlan::scheduleTask(const MetaTask &t) { - qDebug(logPowerSession) << "Scheduling task" << t.name << "to run in" << t.realDelay << "ms"; + qWarning(logPowerSession) << "Scheduling task" << t.name << "to run in" << t.realDelay << "ms"; auto *timer = new QTimer(this); timer->setSingleShot(true); connect(timer, &QTimer::timeout, this, t.fn); diff --git a/src/plugin-qt/power/session/powersaveplan.h b/src/plugin-qt/power/session/powersaveplan.h index f9a72e6..e86c256 100644 --- a/src/plugin-qt/power/session/powersaveplan.h +++ b/src/plugin-qt/power/session/powersaveplan.h @@ -52,7 +52,6 @@ class PowerSavePlan : public QObject { QVector m_timers; QMap m_oldBrightness; bool m_screensaverRunning = false; - bool m_isIdle = false; bool m_allowScreenSaver = true; bool m_psmEnabled = false; uint m_psmDrop = 0;