[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