From a7ecb4a280029c94d743dd20a23baac75f20c930 Mon Sep 17 00:00:00 2001 From: liuxinhao Date: Tue, 21 Dec 2021 15:51:41 +0800 Subject: [PATCH] feature(idle lock): add idle-activation-lock gsettings option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加空闲时是否锁定屏幕GSettings配置项 --- ...com.kylinsec.kiran.screensaver.gschema.xml | 8 +++---- src/idle-watcher/idle-watcher-mate.cpp | 1 + src/manager.cpp | 12 +++++++--- src/prefs.cpp | 23 +++++++++++-------- src/prefs.h | 6 ++++- src/view/window.cpp | 2 +- 6 files changed, 33 insertions(+), 19 deletions(-) diff --git a/data/com.kylinsec.kiran.screensaver.gschema.xml b/data/com.kylinsec.kiran.screensaver.gschema.xml index d5d77e6..17b6f20 100644 --- a/data/com.kylinsec.kiran.screensaver.gschema.xml +++ b/data/com.kylinsec.kiran.screensaver.gschema.xml @@ -5,10 +5,10 @@ "/usr/lib64/kiran-screensaver/libkiran-screensaver-dialog.so" - - - - + + true + 空闲时是否锁定 + true diff --git a/src/idle-watcher/idle-watcher-mate.cpp b/src/idle-watcher/idle-watcher-mate.cpp index f562022..0cba668 100644 --- a/src/idle-watcher/idle-watcher-mate.cpp +++ b/src/idle-watcher/idle-watcher-mate.cpp @@ -97,6 +97,7 @@ bool IdleWatcherMate::setIdleDetectionActive(bool idleDetectionActive) m_idle = false; m_idleNotice = false; + //NOTE:由于空闲预告阶段会抓取鼠标键盘到屏幕外,所以空闲预告阶段不会出现设置空闲检测的情况,暂时不需要考虑特殊情况 if(m_idleTimerID != 0) { killTimer(m_idleTimerID); diff --git a/src/manager.cpp b/src/manager.cpp index 8c26da9..87041ca 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -137,9 +137,15 @@ bool Manager::initIdleWatcher() connect(m_idleWatcher,&IdleWatcher::idleChanged,this, &Manager::onWatcherIdleChanged,Qt::DirectConnection); connect(m_idleWatcher,&IdleWatcher::idleNoticeChanged,this, &Manager::onWatcherIdleNoticeChanged,Qt::DirectConnection); - m_idleWatcher->setEnabled(true); - m_idleWatcher->setIdleDetectionActive(true); - + m_idleWatcher->setEnabled(m_prefs->getIdleActivationLock()); + m_idleWatcher->setIdleDetectionActive(m_prefs->getIdleActivationLock()); + + //连接至GSettings变化,判断是否开启空闲时锁屏,同步空闲监控器状态 + connect(m_prefs,&Prefs::idleActivationLockChanged,[this](bool idleActivationLock){ + KLOG_DEBUG() << "prefs idle activation lock changed:" << idleActivationLock << " update idle watcher enable"; + m_idleWatcher->setEnabled(idleActivationLock); + m_idleWatcher->setIdleDetectionActive(idleActivationLock); + }); return true; } diff --git a/src/prefs.cpp b/src/prefs.cpp index bd34bbd..3e654a9 100644 --- a/src/prefs.cpp +++ b/src/prefs.cpp @@ -26,11 +26,11 @@ } #define SCHEMA_KIRAN_SCREENSAVER "com.kylinsec.kiran.screensaver" -#define KEY_IDLE_ACTIVATION_LOCK "idle-activation-lock" -#define KEY_CAN_LOGOUT "can-logout" -#define KEY_CAN_USER_SWITCH "can-user-switch" -#define KEY_ENABLE_ANIMATION "enable-animation" -#define KEY_SCREENSAVER_LOCKER "screensaver-locker" +#define KEY_IDLE_ACTIVATION_LOCK "idleActivationLock" +#define KEY_CAN_LOGOUT "canLogout" +#define KEY_CAN_USER_SWITCH "canUserSwitch" +#define KEY_ENABLE_ANIMATION "enableAnimation" +#define KEY_SCREENSAVER_LOCKER "screensaverLocker" using namespace Kiran::ScreenSaver; @@ -58,7 +58,7 @@ bool Prefs::init() KLOG_WARNING() << "can't connect screensaver settings changed!"; } - //m_idleActivationLock = m_screensaverSettings->get(KEY_IDLE_ACTIVATION_LOCK).toBool(); + m_idleActivationLock = m_screensaverSettings->get(KEY_IDLE_ACTIVATION_LOCK).toBool(); m_canLogout = m_screensaverSettings->get(KEY_CAN_LOGOUT).toBool(); m_canUserSwitch = m_screensaverSettings->get(KEY_CAN_USER_SWITCH).toBool(); m_enableAnimation = m_screensaverSettings->get(KEY_ENABLE_ANIMATION).toBool(); @@ -66,7 +66,7 @@ bool Prefs::init() ///输出设置项 KLOG_DEBUG() << "load kiran-screensaver prefs:"; - //KLOG_DEBUG() << "\t" KEY_IDLE_ACTIVATION_LOCK << m_idleActivationLock; + KLOG_DEBUG() << "\t" KEY_IDLE_ACTIVATION_LOCK << m_idleActivationLock; KLOG_DEBUG() << "\t" KEY_CAN_LOGOUT << m_canLogout; KLOG_DEBUG() << "\t" KEY_CAN_USER_SWITCH << m_canUserSwitch; KLOG_DEBUG() << "\t" KEY_ENABLE_ANIMATION << m_enableAnimation; @@ -91,14 +91,12 @@ bool Prefs::getCanUserSwitch() const return m_canUserSwitch; } -/* void Prefs::setIdleActivationLock(bool idleActivationLock) { RETURN_IF_SAME(m_idleActivationLock, idleActivationLock); m_idleActivationLock = idleActivationLock; m_screensaverSettings->set(KEY_IDLE_ACTIVATION_LOCK, m_idleActivationLock); } -*/ void Prefs::setCanLogout(bool canLogout) { @@ -117,7 +115,7 @@ void Prefs::setCanUserSwitch(bool canUserSwitch) void Prefs::handleGSettingsChanged(const QString& key) { const QMap boolKeyMap = { - //{KEY_IDLE_ACTIVATION_LOCK, &m_idleActivationLock}, + {KEY_IDLE_ACTIVATION_LOCK, &m_idleActivationLock}, {KEY_CAN_LOGOUT, &m_canLogout}, {KEY_CAN_USER_SWITCH, &m_canUserSwitch}, {KEY_ENABLE_ANIMATION,&m_enableAnimation} @@ -128,6 +126,11 @@ void Prefs::handleGSettingsChanged(const QString& key) { *boolIter.value() = m_screensaverSettings->get(boolIter.key()).toBool(); } + qInfo() << "keyChanged" << key; + if( key == KEY_IDLE_ACTIVATION_LOCK ) + { + emit idleActivationLockChanged(m_idleActivationLock); + } } bool Prefs::getEnableAnimation() const diff --git a/src/prefs.h b/src/prefs.h index 797bdfe..30431d3 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -30,6 +30,7 @@ namespace ScreenSaver { class Prefs : public QObject { + Q_OBJECT public: static Prefs* getInstance(); ~Prefs() override; @@ -48,8 +49,11 @@ public: QString getLockerPluginPath() const; +signals: + void idleActivationLockChanged(bool idleActivationLock); + private: - //void setIdleActivationLock(bool idleActivationLock); + void setIdleActivationLock(bool idleActivationLock); void setCanLogout(bool canLogout); void setCanUserSwitch(bool canUserSwitch); void setEnableAnimation(bool enableAnimation); diff --git a/src/view/window.cpp b/src/view/window.cpp index b05dd81..c826e97 100644 --- a/src/view/window.cpp +++ b/src/view/window.cpp @@ -80,7 +80,7 @@ void Window::setScreen(QScreen *screen) { setObjectName(QString("screen_background_%1").arg(screen->name())); connect(screen, &QScreen::geometryChanged, - this, &Window::handleScreenGeometryChanged); + this, &Window::handleScreenGeometryChanged ); } else { -- 2.27.0