diff --git a/0000-feature-idle-lock-add-idle-activation-lock-gsettings-a7ecb4a2.patch b/0000-feature-idle-lock-add-idle-activation-lock-gsettings-a7ecb4a2.patch new file mode 100644 index 0000000..7cb20a2 --- /dev/null +++ b/0000-feature-idle-lock-add-idle-activation-lock-gsettings-a7ecb4a2.patch @@ -0,0 +1,188 @@ +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 + diff --git a/0002-fix-crash-fix-crash-in-some-situation-d001fc82.patch b/0002-fix-crash-fix-crash-in-some-situation-d001fc82.patch new file mode 100644 index 0000000..567c640 --- /dev/null +++ b/0002-fix-crash-fix-crash-in-some-situation-d001fc82.patch @@ -0,0 +1,119 @@ +From d001fc82a1a872ae1dd0dadc5ef3d0c80181c1f6 Mon Sep 17 00:00:00 2001 +From: liuxinhao +Date: Fri, 31 Dec 2021 15:32:01 +0800 +Subject: [PATCH 2/3] fix(crash): fix crash in some situation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 修复屏保后端在某些情况下崩溃的问题 +--- + src/idle-watcher/idle-watcher-mate.cpp | 3 +++ + src/view/screen-manager.cpp | 16 ++++++++++------ + src/view/screen-manager.h | 6 +++--- + 3 files changed, 16 insertions(+), 9 deletions(-) + +diff --git a/src/idle-watcher/idle-watcher-mate.cpp b/src/idle-watcher/idle-watcher-mate.cpp +index 0cba668..9d744c3 100644 +--- a/src/idle-watcher/idle-watcher-mate.cpp ++++ b/src/idle-watcher/idle-watcher-mate.cpp +@@ -97,11 +97,14 @@ bool IdleWatcherMate::setIdleDetectionActive(bool idleDetectionActive) + + m_idle = false; + m_idleNotice = false; ++ + //NOTE:由于空闲预告阶段会抓取鼠标键盘到屏幕外,所以空闲预告阶段不会出现设置空闲检测的情况,暂时不需要考虑特殊情况 + if(m_idleTimerID != 0) + { + killTimer(m_idleTimerID); ++ m_idleTimerID = 0; + } ++ + m_idleDetectionActive = idleDetectionActive; + return true; + } +diff --git a/src/view/screen-manager.cpp b/src/view/screen-manager.cpp +index f8d7803..d7fc124 100644 +--- a/src/view/screen-manager.cpp ++++ b/src/view/screen-manager.cpp +@@ -42,10 +42,10 @@ ScreenManager::ScreenManager(Fade *fade, + if (m_prefs != nullptr) + { + m_enableAnimation = m_prefs->getEnableAnimation(); +- m_idleActivationLock = m_prefs->getIdleActivationLock(); ++ //m_idleActivationLock = m_prefs->getIdleActivationLock(); + } + +- QCoreApplication::instance()->installEventFilter(this); ++ QApplication::instance()->installEventFilter(this); + } + + ScreenManager::~ScreenManager() +@@ -260,14 +260,15 @@ bool ScreenManager::activate() + // 创建解锁框,屏保框 + m_screensaver = new Screensaver(m_enableAnimation, nullptr); + +- if (m_idleActivationLock) +- { ++ //NOTE:空闲是否锁定屏幕控制权交由IdleWatcher决定,若IdleWatcher发出空闲信号,则锁定屏幕 ++// if (m_idleActivationLock) // 若开启空闲时锁定屏幕,创建解锁框 ++// { + if (!setLockActive(true)) + { + delete m_screensaver; + return false; + } +- } ++// } + + // 获取桌面壁纸路径 + QString backgroundPath; +@@ -371,9 +372,10 @@ bool ScreenManager::eventFilter(QObject *watched, QEvent *event) + return QObject::eventFilter(watched, event); + } + ++//NOTE:在事件过滤之中删除某些控件并且该控件同时是事件的接收者需要过滤该事件,避免崩溃 + bool ScreenManager::eventFilterActivate(QObject *watched, QEvent *event) + { +- if (!m_active) ++ if ( !m_active || (event->type()!=QEvent::MouseButtonPress && event->type()!=QEvent::KeyPress) ) + return false; + + // 若解锁框已被激活 按键和鼠标事件触发解锁框显示 +@@ -388,6 +390,7 @@ bool ScreenManager::eventFilterActivate(QObject *watched, QEvent *event) + else if (!getLockActive()) + { + emit sigReqDeactivated(); ++ return true; + } + } + else if (event->type() == QEvent::KeyPress) +@@ -396,6 +399,7 @@ bool ScreenManager::eventFilterActivate(QObject *watched, QEvent *event) + if (!getLockActive()) + { + emit sigReqDeactivated(); ++ return true; + } + else + { +diff --git a/src/view/screen-manager.h b/src/view/screen-manager.h +index b5253a0..9fa14c9 100644 +--- a/src/view/screen-manager.h ++++ b/src/view/screen-manager.h +@@ -121,10 +121,10 @@ private: + // 当前显示内容的背景窗口 + Window* m_currentWindow = nullptr; + // 屏保界面 +- Screensaver* m_screensaver; ++ Screensaver* m_screensaver = nullptr; + // 解锁框界面 +- PluginInterface* m_lockerPluginInterface; +- LockerInterface* m_lockerInterface; ++ PluginInterface* m_lockerPluginInterface = nullptr; ++ LockerInterface* m_lockerInterface = nullptr; + }; + } // namespace ScreenSaver + } // namespace Kiran +-- +2.27.0 + diff --git a/0003-refactor-Qt-adapt-to-lower-version-QT-d588833c.patch b/0003-refactor-Qt-adapt-to-lower-version-QT-d588833c.patch new file mode 100644 index 0000000..a4f4ac8 --- /dev/null +++ b/0003-refactor-Qt-adapt-to-lower-version-QT-d588833c.patch @@ -0,0 +1,32 @@ +From d588833ca6e4b53037e88a67716f03ce332aae9a Mon Sep 17 00:00:00 2001 +From: liuxinhao +Date: Tue, 4 Jan 2022 15:26:55 +0800 +Subject: [PATCH 3/3] refactor(Qt): adapt to lower version QT +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- 适配5.9.2版本Qt,QStringLiteral头文件差异问题 +--- + src/listener/listener.cpp | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/listener/listener.cpp b/src/listener/listener.cpp +index b01996e..4440f72 100644 +--- a/src/listener/listener.cpp ++++ b/src/listener/listener.cpp +@@ -20,7 +20,11 @@ + #include + #include + #include ++#if (QT_VERSION > QT_VERSION_CHECK(5,9,2)) + #include ++#else ++#include ++#endif + + #define NOT_SUPPORTED_METHOD \ + { \ +-- +2.27.0 + diff --git a/kiran-screensaver-2.2.0.tar.gz b/kiran-screensaver-2.2.0.tar.gz new file mode 100644 index 0000000..f2cab26 Binary files /dev/null and b/kiran-screensaver-2.2.0.tar.gz differ diff --git a/kiran-screensaver.spec b/kiran-screensaver.spec new file mode 100644 index 0000000..51a8b6d --- /dev/null +++ b/kiran-screensaver.spec @@ -0,0 +1,116 @@ +Name: kiran-screensaver +Version: 2.2.0 +Release: 7.kb3 +Summary: Kiran Desktop Screensaver Backend +Summary(zh_CN): kiran桌面屏保后端 + +License: Mulan PSL v2 + +Source0: %{name}-%{version}.tar.gz + +Patch0001: 0000-feature-idle-lock-add-idle-activation-lock-gsettings-a7ecb4a2.patch +Patch0002: 0002-fix-crash-fix-crash-in-some-situation-d001fc82.patch +Patch0003: 0003-refactor-Qt-adapt-to-lower-version-QT-d588833c.patch + +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: qt5-qtbase-devel +BuildRequires: qt5-linguist +BuildRequires: qt5-qtx11extras-devel +BuildRequires: qt5-qtsvg-devel +BuildRequires: libxcb-devel +BuildRequires: gsettings-qt-devel +BuildRequires: kiran-widgets-qt5-devel +BuildRequires: kiran-log-qt5-devel + +Requires: systemd +Requires: qt5-qtbase +Requires: qt5-qtx11extras +Requires: qt5-qtsvg +Requires: libxcb +Requires: gsettings-qt +Requires: kiran-widgets-qt5 +Requires: kiran-log-qt5 +Requires: kiran-screensaver-dialog >= 2.2.1 +Requires: kiran-session-manager + +%description +%{summary}. + +%package devel +Summary: kiran desktop screensaver backend develop package +#Requires: %{name}%{?_isa} = %{version}-%{release} +%description devel +%{summary}. + +%prep +%autosetup -p 1 + +%build +%{__mkdir} -p %{buildroot} +%cmake +%make_build + +%install +%make_install + +%post -n kiran-screensaver +glib-compile-schemas /usr/share/glib-2.0/schemas + +%files +%doc +%{_sysconfdir}/pam.d/kiran-screensaver +%{_sysconfdir}/xdg/autostart/kiran-screensaver.desktop +%{_bindir}/kiran-screensaver +%{_bindir}/kiran-screensaver-command +%{_datadir}/kiran-screensaver/translations/* +%{_datadir}/dbus-1/services/com.kylinsec.Kiran.ScreenSaver.service +%{_datadir}/glib-2.0/schemas/com.kylinsec.kiran.screensaver.gschema.xml + +%files devel +%{_includedir}/kiran-screensaver/* + +%clean +rm -rf %{buildroot} + +%changelog +* Mon Jan 24 2022 liuxinhao - 2.2.0-7.kb3 +- KYBD: update license + +* Tue Jan 04 2022 liuxinhao - 2.2.0-7.kb2 +- KYOS-B: fix crash in some situation +- KYOS-S: adapt to Qt5.9.2 + +* Wed Dec 29 2021 kpkg - 2.2.0-7.kb1 +- rebuild for KY3.4-MATE-modules-dev + +* Wed Dec 29 2021 caoyuanji - 2.2.0-7 +- Upgrade version number for easy upgrade + +* Wed Dec 22 2021 caoyuanji - 2.2.0-6.kb1 +- rebuild for KY3.4-4-KiranUI-2.2 + +* Tue Dec 21 2021 liuxinhao - 2.2.0-6 +- KYOS-F: add "idle-activation-lock" gsettings option + +* Tue Nov 23 2021 liuxinhao - 2.2.0-5 +- KYOS-B: fix Kiran desktop environment variable matching failed + +* Fri Nov 19 2021 liuxinhao - 2.2.0-4.kb1 +- KYOS-B: fix crash caused by double free when exiting + +* Tue Nov 09 2021 liuxinhao - 2.2.0-3.kb1 +- KYOS-F: using kiran appearance background file path + +* Mon Nov 08 2021 liuxinhao - 2.2.0-2.kb3 +- KYBD: solve the kiran-screensaver-dialog circular dependency problem + +* Mon Nov 08 2021 liuxinhao - 2.2.0-2.kb2 +- KYBD: fix dependency error problem + +* Fri Nov 05 2021 liuxinhao - 2.2.0-2.kb1 +- KYOS-F: the dbus service of mate-screensaver is not provided +- KYBD: changed required name + +* Tue Oct 12 2021 liuxinhao - 2.2.0-1.kb1 +- KYOS-B: initial build