[kde-workspace] pull in proposed screenlocker fixes (kde#224200, kde#327947, kde#329076)
Rex Dieter
rdieter at fedoraproject.org
Wed Apr 23 03:20:33 UTC 2014
commit 0f1e35fbc636c8f840597d9cb66fbc7a1eb35567
Author: Rex Dieter <rdieter at math.unl.edu>
Date: Tue Apr 22 22:20:29 2014 -0500
pull in proposed screenlocker fixes (kde#224200, kde#327947, kde#329076)
kde-workspace-r117091.patch | 99 +++++++++++++++++++++++++++++++++++++++++++
kde-workspace-r117644.patch | 49 +++++++++++++++++++++
kde-workspace.spec | 13 +++++-
3 files changed, 160 insertions(+), 1 deletions(-)
---
diff --git a/kde-workspace-r117091.patch b/kde-workspace-r117091.patch
new file mode 100644
index 0000000..f47b5c6
--- /dev/null
+++ b/kde-workspace-r117091.patch
@@ -0,0 +1,99 @@
+diff --git ksmserver/screenlocker/greeter/greeterapp.cpp ksmserver/screenlocker/greeter/greeterapp.cpp
+index c5e2f85..475d223 100644
+--- ksmserver/screenlocker/greeter/greeterapp.cpp
++++ ksmserver/screenlocker/greeter/greeterapp.cpp
+@@ -383,6 +383,12 @@ void UnlockApp::setImmediateLock(bool immediate)
+ m_immediateLock = immediate;
+ }
+
++void UnlockApp::lockImmediately()
++{
++ setImmediateLock(true);
++ setLockedPropertyOnViews();
++}
++
+ bool UnlockApp::eventFilter(QObject *obj, QEvent *event)
+ {
+ if (obj != this && event->type() == QEvent::Show) {
+diff --git ksmserver/screenlocker/greeter/main.cpp ksmserver/screenlocker/greeter/main.cpp
+index d898734..d5c6a2b 100644
+--- ksmserver/screenlocker/greeter/main.cpp
++++ ksmserver/screenlocker/greeter/main.cpp
+@@ -24,11 +24,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ #include <iostream>
+
++#include <signal.h>
++
+ #include "greeterapp.h"
+
+ static const char description[] = I18N_NOOP( "Greeter for the KDE Plasma Workspaces Screen locker" );
+ static const char version[] = "0.1";
+
++ScreenLocker::UnlockApp *m_instance = NULL;
++
++static void signalHandler(int signum)
++{
++ if (!m_instance) return;
++
++ m_instance->lockImmediately();
++}
++
+ int main(int argc, char* argv[])
+ {
+ KAboutData aboutData( "kscreenlocker_greet", 0, ki18n( "KScreenLocker Greeter" ),
+@@ -60,6 +77,7 @@ int main(int argc, char* argv[])
+ KCmdLineArgs::addCmdLineOptions(options);
+
+ ScreenLocker::UnlockApp app;
++ m_instance = &app;
+ KGlobal::locale()->insertCatalog(QLatin1String( "libkworkspace" ));
+ app.disableSessionManagement(); // manually-started
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+@@ -75,5 +93,11 @@ int main(int argc, char* argv[])
+ // This allow ksmserver to know when the applicaion has actually finished setting itself up.
+ // Crucial for blocking until it is ready, ensuring locking happens before sleep, e.g.
+ std::cout << "Locked at " << QDateTime::currentDateTime().toTime_t() << std::endl;
++
++ struct sigaction sa;
++ sa.sa_handler = signalHandler;
++ sigemptyset(&sa.sa_mask);
++ sa.sa_flags = 0;
++ sigaction(SIGUSR1, &sa, NULL);
+ return app.exec();
+ }
+diff --git ksmserver/screenlocker/greeter/greeterapp.h ksmserver/screenlocker/greeter/greeterapp.h
+index 8b79188..895337e 100644
+--- ksmserver/screenlocker/greeter/greeterapp.h
++++ ksmserver/screenlocker/greeter/greeterapp.h
+@@ -44,6 +44,7 @@ public:
+
+ void setTesting(bool enable);
+ void setImmediateLock(bool immediateLock);
++ void lockImmediately();
+
+ public Q_SLOTS:
+ void desktopResized();
+diff --git ksmserver/screenlocker/ksldapp.cpp ksmserver/screenlocker/ksldapp.cpp
+index 3dfcc9e..d43fde7 100644
+--- ksmserver/screenlocker/ksldapp.cpp
++++ ksmserver/screenlocker/ksldapp.cpp
+@@ -46,6 +46,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #include <X11/Xlib.h>
+ // other
+ #include <unistd.h>
++#include <signal.h>
+
+ namespace ScreenLocker
+ {
+@@ -174,6 +175,10 @@ void KSldApp::lock(bool immediateLock)
+ // already locked or acquiring lock, no need to lock again
+ // but make sure it's really locked
+ endGraceTime();
++ if (immediateLock) {
++ // signal the greeter to switch to immediateLock mode
++ kill(m_lockProcess->pid(), SIGUSR1);
++ }
+ return;
+ }
+
diff --git a/kde-workspace-r117644.patch b/kde-workspace-r117644.patch
new file mode 100644
index 0000000..b7b69e5
--- /dev/null
+++ b/kde-workspace-r117644.patch
@@ -0,0 +1,49 @@
+diff --git a/ksmserver/screenlocker/greeter/main.cpp b/ksmserver/screenlocker/greeter/main.cpp
+index 16aa283..8e4b596 100644
+--- a/ksmserver/screenlocker/greeter/main.cpp
++++ b/ksmserver/screenlocker/greeter/main.cpp
+@@ -35,9 +35,20 @@ ScreenLocker::UnlockApp *m_instance;
+
+ static void signalHandler(int signum)
+ {
+- if (!m_instance) return;
+-
+- m_instance->lockImmediately();
++ if (!m_instance) return;
++
++ switch(signum)
++ {
++ case SIGTERM:
++ // exit gracefully to not leave behind screensaver processes (bug#224200)
++ // return exit code 1 to indicate that a valid password was not entered,
++ // to prevent circumventing the password input by sending a SIGTERM
++ m_instance->exit(1);
++ break;
++ case SIGUSR1:
++ m_instance->lockImmediately();
++ break;
++ }
+ }
+
+ int main(int argc, char* argv[])
+@@ -92,6 +103,7 @@ int main(int argc, char* argv[])
+ sa.sa_handler = signalHandler;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
++ sigaction(SIGTERM, &sa, NULL);
+ sigaction(SIGUSR1, &sa, NULL);
+ return app.exec();
+ }
+diff --git a/ksmserver/screenlocker/ksldapp.cpp b/ksmserver/screenlocker/ksldapp.cpp
+index d53e9a4..78c1ddf 100644
+--- a/ksmserver/screenlocker/ksldapp.cpp
++++ b/ksmserver/screenlocker/ksldapp.cpp
+@@ -374,7 +374,7 @@ void KSldApp::unlock()
+ return;
+ }
+ s_graceTimeKill = true;
+- m_lockProcess->kill();
++ m_lockProcess->terminate();
+ }
+
+ void KSldApp::inhibit()
diff --git a/kde-workspace.spec b/kde-workspace.spec
index dec7388..16d4686 100644
--- a/kde-workspace.spec
+++ b/kde-workspace.spec
@@ -20,7 +20,7 @@
Summary: KDE Workspace
Name: kde-workspace
Version: 4.11.8
-Release: 5%{?dist}
+Release: 6%{?dist}
License: GPLv2
URL: https://projects.kde.org/projects/kde/kde-workspace
@@ -136,6 +136,12 @@ Patch61: kde-workspace-4.11.7-weather-fix-bbcukmet-clear-sky.patch
# bbcukmet: fix a crash (#1079296/kde#332392) and improve error handling
Patch62: kde-workspace-4.11.7-weather-fix-bbcukmet-crash-kde#332392.patch
+# https://git.reviewboard.kde.org/r/117091/
+Patch63: kde-workspace-r117091.patch
+
+# https://git.reviewboard.kde.org/r/117644/
+Patch64: kde-workspace-r117644.patch
+
## upstream patches
# post 4.11.8 commits
Patch101: 0001-fix-resumption-from-console-mode-when-monotonic-cloc.patch
@@ -501,6 +507,8 @@ Requires: akonadi
%patch60 -p1 -b .weather-fix-bbcukmet-temp
%patch61 -p1 -b .weather-fix-bbcukmet-clear-sky
%patch62 -p1 -b .weather-fix-bbcukmet-crash
+%patch63 -p0 -b .r117091
+%patch64 -p1 -b .r117644
# upstream patches
%patch101 -p1 -b .0001
@@ -1101,6 +1109,9 @@ fi
%changelog
+* Tue Apr 22 2014 Rex Dieter <rdieter at fedoraproject.org> 4.11.8-6
+- pull in proposed screenlocker fixes (kde#224200, kde#327947, kde#329076)
+
* Sat Apr 19 2014 Rex Dieter <rdieter at fedoraproject.org> 4.11.8-5
- plasma-dataengine-extractor love
- move calendar dataengine to -akonadi subpkg (currently unused)
More information about the scm-commits
mailing list