diff --git a/powerman/application.cpp b/powerman/application.cpp index 5396112..540b5c7 100644 --- a/powerman/application.cpp +++ b/powerman/application.cpp @@ -31,8 +31,12 @@ Application::Application(QObject *parent) , m_dimDisplayAction(new DimDisplayAction) { m_closeScreenTimeout = m_settings.value("CloseScreenTimeout", 600).toInt(); + m_sleepWhenClosedScreen = m_settings.value("SleepWhenClosedScreen", false).toBool(); + m_lockWhenClosedScreen = m_settings.value("LockWhenClosedScreen", true).toBool(); m_dimDisplayAction->setTimeout(m_closeScreenTimeout); + m_dimDisplayAction->setSleep(m_sleepWhenClosedScreen); + m_dimDisplayAction->setLock(m_lockWhenClosedScreen); QDBusConnection::sessionBus().registerService(QStringLiteral("com.cutefish.PowerManager")); QDBusConnection::sessionBus().registerObject(QStringLiteral("/PowerManager"), this); @@ -43,4 +47,22 @@ void Application::setDimDisplayTimeout(int timeout) { m_closeScreenTimeout = timeout; m_dimDisplayAction->setTimeout(timeout); + + m_settings.setValue("CloseScreenTimeout", timeout); +} + +void Application::setSleepWhenClosedScreen(bool enabled) +{ + m_sleepWhenClosedScreen = enabled; + m_dimDisplayAction->setSleep(enabled); + + m_settings.setValue("SleepWhenClosedScreen", enabled); +} + +void Application::setLockWhenClosedScreen(bool lock) +{ + m_lockWhenClosedScreen = lock; + m_dimDisplayAction->setLock(lock); + + m_settings.setValue("LockWhenClosedScreen", lock); } diff --git a/powerman/application.h b/powerman/application.h index 317eaf2..2e6a102 100644 --- a/powerman/application.h +++ b/powerman/application.h @@ -39,6 +39,8 @@ public: explicit Application(QObject *parent = nullptr); void setDimDisplayTimeout(int timeout); + void setSleepWhenClosedScreen(bool enabled); + void setLockWhenClosedScreen(bool lock); private: LidWatcher *m_lidWatcher; @@ -46,6 +48,8 @@ private: QSettings m_settings; int m_closeScreenTimeout; + bool m_sleepWhenClosedScreen; + bool m_lockWhenClosedScreen; DimDisplayAction *m_dimDisplayAction; }; diff --git a/powerman/com.cutefish.PowerManager.xml b/powerman/com.cutefish.PowerManager.xml index a7ab292..d92e1d4 100644 --- a/powerman/com.cutefish.PowerManager.xml +++ b/powerman/com.cutefish.PowerManager.xml @@ -4,5 +4,13 @@ + + + + + + + + \ No newline at end of file diff --git a/powerman/dimdisplayaction.cpp b/powerman/dimdisplayaction.cpp index c0a3a1e..4001efe 100644 --- a/powerman/dimdisplayaction.cpp +++ b/powerman/dimdisplayaction.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -66,6 +67,22 @@ void DimDisplayAction::onIdleTimeout(int msec) if (sec == m_dimOnIdleTime) { m_iface.asyncCall("setValue", QVariant::fromValue(0)); + + // Sleep + if (m_sleep) { + QDBusInterface iface("com.cutefish.Session", + "/Session", + "com.cutefish.Session", QDBusConnection::sessionBus()); + + if (iface.isValid()) { + iface.call("suspend"); + } + } + + if (m_lock) { + QProcess::startDetached("cutefish-screenlocker", QStringList()); + } + } else if (sec == (m_dimOnIdleTime * 3 / 4)) { const int newBrightness = qRound(m_oldScreenBrightness / 8.0); m_iface.asyncCall("setValue", QVariant::fromValue(newBrightness)); @@ -94,3 +111,13 @@ void DimDisplayAction::setTimeout(int timeout) registerIdleTimeout(m_dimOnIdleTime / 2); registerIdleTimeout(m_dimOnIdleTime); } + +void DimDisplayAction::setSleep(bool sleep) +{ + m_sleep = sleep; +} + +void DimDisplayAction::setLock(bool lock) +{ + m_lock = lock; +} diff --git a/powerman/dimdisplayaction.h b/powerman/dimdisplayaction.h index ef0908d..5dba415 100644 --- a/powerman/dimdisplayaction.h +++ b/powerman/dimdisplayaction.h @@ -34,12 +34,16 @@ public: void onWakeupFromIdle() override; void onIdleTimeout(int msec) override; void setTimeout(int timeout) override; + void setSleep(bool sleep); + void setLock(bool lock); private: QDBusInterface m_iface; int m_dimOnIdleTime = 0; int m_oldScreenBrightness = 0; bool m_dimmed = false; + bool m_sleep = false; + bool m_lock = false; }; #endif // DIMDISPLAYACTION_H