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