From 350e84e6486bc5838afcac9c39ebc8f63b49c65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrianna=20Pi=C5=84ska?= Date: Sun, 21 Apr 2024 04:06:13 +0200 Subject: [PATCH 1/5] first attempt to split blanking and locking --- src/powerkit_common.h | 1 + src/powerkit_dialog.cpp | 25 ++++++++++++++++++++++++- src/powerkit_dialog.h | 2 ++ src/powerkit_screensaver.cpp | 19 ++++++++++++------- src/powerkit_screensaver.h | 3 ++- src/powerkit_settings.h | 1 + 6 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/powerkit_common.h b/src/powerkit_common.h index 4586d26..707c987 100644 --- a/src/powerkit_common.h +++ b/src/powerkit_common.h @@ -70,5 +70,6 @@ namespace PowerKit #define POWERKIT_DBUS_PROPERTIES "org.freedesktop.DBus.Properties" #define POWERKIT_SCREENSAVER_LOCK_CMD "xsecurelock" #define POWERKIT_SCREENSAVER_TIMEOUT_BLANK 300 +#define POWERKIT_SCREENSAVER_TIMEOUT_LOCK 600 #endif // POWERKIT_COMMON_H diff --git a/src/powerkit_dialog.cpp b/src/powerkit_dialog.cpp index 96392aa..1b5091d 100644 --- a/src/powerkit_dialog.cpp +++ b/src/powerkit_dialog.cpp @@ -53,6 +53,7 @@ Dialog::Dialog(QWidget *parent, , cpuFreqLabel(nullptr) , cpuTempLabel(nullptr) , screensaverBlank(nullptr) + , screensaverLock(nullptr) , hasCpuCoreTemp(false) , hasBattery(false) { @@ -437,7 +438,7 @@ void Dialog::setupWidgets() const auto ssContainerLayout = new QHBoxLayout(ssContainer); ssContainerLayout->setMargin(0); - const auto screensaverBlankLabel = new QLabel(tr("Screen Saver Timeout"), this); + const auto screensaverBlankLabel = new QLabel(tr("Blank screen"), this); screensaverBlank = new QSpinBox(this); screensaverBlank->setMaximumWidth(MAX_WIDTH); screensaverBlank->setMinimumWidth(MAX_WIDTH); @@ -449,6 +450,18 @@ void Dialog::setupWidgets() ssContainerLayout->addWidget(screensaverBlankLabel); ssContainerLayout->addWidget(screensaverBlank); + const auto screensaverLockLabel = new QLabel(tr("Lock screen"), this); + screensaverLock = new QSpinBox(this); + screensaverLock->setMaximumWidth(MAX_WIDTH); + screensaverLock->setMinimumWidth(MAX_WIDTH); + screensaverLock->setMinimum(1); + screensaverLock->setMaximum(1000); + screensaverLock->setSuffix(QString(" %1").arg(tr("min"))); + screensaverLock->setPrefix(tr("After ")); + + ssContainerLayout->addWidget(screensaverLockLabel); + ssContainerLayout->addWidget(screensaverLock); + // notify const auto notifyContainer = new QGroupBox(this); notifyContainer->setTitle(tr("Notifications")); @@ -615,6 +628,8 @@ void Dialog::connectWidgets() this, SLOT(handleBacklightMouseWheel(bool))); connect(screensaverBlank, SIGNAL(valueChanged(int)), this, SLOT(handleScreensaverBlank(int))); + connect(screensaverLock, SIGNAL(valueChanged(int)), + this, SLOT(handleScreensaverLock(int))); } // load settings and set defaults @@ -774,6 +789,9 @@ void Dialog::loadSettings() screensaverBlank->setValue(Settings::getValue(CONF_SCREENSAVER_TIMEOUT_BLANK, POWERKIT_SCREENSAVER_TIMEOUT_BLANK).toInt() / 60); + + screensaverLock->setValue(Settings::getValue(CONF_SCREENSAVER_TIMEOUT_LOCK, + POWERKIT_SCREENSAVER_TIMEOUT_LOCK).toInt() / 60); } void Dialog::saveSettings() @@ -1151,3 +1169,8 @@ void Dialog::handleScreensaverBlank(int value) { Settings::setValue(CONF_SCREENSAVER_TIMEOUT_BLANK, value * 60); } + +void Dialog::handleScreensaverLock(int value) +{ + Settings::setValue(CONF_SCREENSAVER_TIMEOUT_LOCK, value * 60); +} diff --git a/src/powerkit_dialog.h b/src/powerkit_dialog.h index efedf1d..e0f9ed5 100644 --- a/src/powerkit_dialog.h +++ b/src/powerkit_dialog.h @@ -78,6 +78,7 @@ namespace PowerKit QLabel *cpuTempLabel; QSpinBox *screensaverBlank; + QSpinBox *screensaverLock; bool hasCpuCoreTemp; bool hasBattery; @@ -127,6 +128,7 @@ namespace PowerKit void enableLid(bool enabled); void handleBacklightMouseWheel(bool triggered); void handleScreensaverBlank(int value); + void handleScreensaverLock(int value); }; } diff --git a/src/powerkit_screensaver.cpp b/src/powerkit_screensaver.cpp index 8fbeef0..6f3743c 100644 --- a/src/powerkit_screensaver.cpp +++ b/src/powerkit_screensaver.cpp @@ -47,7 +47,8 @@ using namespace PowerKit; ScreenSaver::ScreenSaver(QObject *parent) : QObject(parent) - , blank(POWERKIT_SCREENSAVER_TIMEOUT_BLANK) + , blank_time(POWERKIT_SCREENSAVER_TIMEOUT_BLANK) + , lock_time(POWERKIT_SCREENSAVER_TIMEOUT_LOCK) { timer.setInterval(PK_SCREENSAVER_TIMER); connect(&timer, SIGNAL(timeout()), @@ -91,23 +92,27 @@ void ScreenSaver::timeOut() SimulateUserActivity(); return; } - int idle = GetSessionIdleTime(); - qDebug() << "screensaver idle" << idle << blank; - if (idle >= blank) { Lock(); } + int idle_time = GetSessionIdleTime(); + qDebug() << "screensaver idle" << idle_time << blank_time << lock_time; + if (idle_time >= lock_time) { + Lock(); + } else if (idle_time >= blank_time) { + setDisplaysOff(true); + } } void ScreenSaver::Update() { xlock = Settings::getValue(CONF_SCREENSAVER_LOCK_CMD, POWERKIT_SCREENSAVER_LOCK_CMD).toString(); - blank = Settings::getValue(CONF_SCREENSAVER_TIMEOUT_BLANK, - POWERKIT_SCREENSAVER_TIMEOUT_BLANK).toInt(); + lock_time = Settings::getValue(CONF_SCREENSAVER_TIMEOUT_LOCK, + POWERKIT_SCREENSAVER_TIMEOUT_LOCK).toInt(); int exe1 = QProcess::execute("xset", QStringList() << "-dpms"); int exe2 = QProcess::execute("xset", QStringList() << "s" << "on"); int exe3 = QProcess::execute("xset", - QStringList() << "s" << QString::number(blank)); + QStringList() << "s" << QString::number(lock_time)); qDebug() << "screensaver update" << exe1 << exe2 << exe3; SimulateUserActivity(); } diff --git a/src/powerkit_screensaver.h b/src/powerkit_screensaver.h index 172ab8a..2574562 100644 --- a/src/powerkit_screensaver.h +++ b/src/powerkit_screensaver.h @@ -27,7 +27,8 @@ namespace PowerKit private: QTimer timer; QMap clients; - int blank; + int blank_time; + int lock_time; QString xlock; signals: diff --git a/src/powerkit_settings.h b/src/powerkit_settings.h index 8a5028a..60dc1e8 100644 --- a/src/powerkit_settings.h +++ b/src/powerkit_settings.h @@ -47,6 +47,7 @@ #define CONF_KERNEL_BYPASS "kernel_cmd_bypass" #define CONF_SCREENSAVER_LOCK_CMD "screensaver_lock_cmd" #define CONF_SCREENSAVER_TIMEOUT_BLANK "screensaver_blank_timeout" +#define CONF_SCREENSAVER_TIMEOUT_LOCK "screensaver_lock_timeout" namespace PowerKit { From b7f55907441b14cb859eb553f87096498ac06e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrianna=20Pi=C5=84ska?= Date: Sun, 21 Apr 2024 04:39:27 +0200 Subject: [PATCH 2/5] Update both timeout values from the config --- src/powerkit_screensaver.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/powerkit_screensaver.cpp b/src/powerkit_screensaver.cpp index 6f3743c..ac8ff4f 100644 --- a/src/powerkit_screensaver.cpp +++ b/src/powerkit_screensaver.cpp @@ -105,6 +105,8 @@ void ScreenSaver::Update() { xlock = Settings::getValue(CONF_SCREENSAVER_LOCK_CMD, POWERKIT_SCREENSAVER_LOCK_CMD).toString(); + blank_time = Settings::getValue(CONF_SCREENSAVER_TIMEOUT_BLANK, + POWERKIT_SCREENSAVER_TIMEOUT_BLANK).toInt(); lock_time = Settings::getValue(CONF_SCREENSAVER_TIMEOUT_LOCK, POWERKIT_SCREENSAVER_TIMEOUT_LOCK).toInt(); int exe1 = QProcess::execute("xset", From 98bd0d15fe0ad4f3520526e8767e2f3dc0e78604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrianna=20Pi=C5=84ska?= Date: Sun, 21 Apr 2024 10:14:09 +0200 Subject: [PATCH 3/5] Allow locking and blanking in either order --- src/powerkit_screensaver.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/powerkit_screensaver.cpp b/src/powerkit_screensaver.cpp index ac8ff4f..b099636 100644 --- a/src/powerkit_screensaver.cpp +++ b/src/powerkit_screensaver.cpp @@ -96,7 +96,8 @@ void ScreenSaver::timeOut() qDebug() << "screensaver idle" << idle_time << blank_time << lock_time; if (idle_time >= lock_time) { Lock(); - } else if (idle_time >= blank_time) { + } + if (idle_time >= blank_time) { setDisplaysOff(true); } } @@ -116,6 +117,11 @@ void ScreenSaver::Update() int exe3 = QProcess::execute("xset", QStringList() << "s" << QString::number(lock_time)); qDebug() << "screensaver update" << exe1 << exe2 << exe3; + if (lock_time < blank_time) { + int lock_before_blank = QProcess::execute("xset", + QStringList() << "s" << "noblank"); + qDebug() << "screensaver update noblank" << lock_before_blank; + } SimulateUserActivity(); } @@ -124,7 +130,6 @@ void ScreenSaver::Lock() if (xlock.isEmpty()) { return; } qDebug() << "screensaver lock"; QProcess::startDetached(xlock, QStringList()); - setDisplaysOff(true); } void ScreenSaver::SimulateUserActivity() From 6c142b9bfd8358e435d6bd1a17da6d8de1fbe83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrianna=20Pi=C5=84ska?= Date: Mon, 22 Jul 2024 21:58:24 +0200 Subject: [PATCH 4/5] Better debug messages for idle, blank and lock times Co-authored-by: Prajwal S N --- src/powerkit_screensaver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/powerkit_screensaver.cpp b/src/powerkit_screensaver.cpp index b099636..b5d2dea 100644 --- a/src/powerkit_screensaver.cpp +++ b/src/powerkit_screensaver.cpp @@ -93,7 +93,9 @@ void ScreenSaver::timeOut() return; } int idle_time = GetSessionIdleTime(); - qDebug() << "screensaver idle" << idle_time << blank_time << lock_time; + qDebug() << "screen idle" << idle_time; + qDebug() << "screen blank timeout" << blank_time; + qDebug() << "screen lock timeout" << lock_time; if (idle_time >= lock_time) { Lock(); } From a33af1de33c9ddd2aafa503955d600abea1531ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrianna=20Pi=C5=84ska?= Date: Mon, 22 Jul 2024 22:17:23 +0200 Subject: [PATCH 5/5] If blanking and locking at the same time, blank first --- src/powerkit_screensaver.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/powerkit_screensaver.cpp b/src/powerkit_screensaver.cpp index b5d2dea..71e6021 100644 --- a/src/powerkit_screensaver.cpp +++ b/src/powerkit_screensaver.cpp @@ -96,12 +96,12 @@ void ScreenSaver::timeOut() qDebug() << "screen idle" << idle_time; qDebug() << "screen blank timeout" << blank_time; qDebug() << "screen lock timeout" << lock_time; - if (idle_time >= lock_time) { - Lock(); - } if (idle_time >= blank_time) { setDisplaysOff(true); } + if (idle_time >= lock_time) { + Lock(); + } } void ScreenSaver::Update()