[kde-workspace] /: block until the lock windows are shown; prevents sleeping before locking

Aaron Seigo aseigo at kde.org
Thu Mar 14 11:18:07 UTC 2013


Git commit 62c2c398611b2e6ef6e1e38ed79bc9540fc02ec9 by Aaron Seigo.
Committed on 14/03/2013 at 12:16.
Pushed by aseigo into branch 'master'.

block until the lock windows are shown; prevents sleeping before locking

accomplished by:

* synchronously calling desktopResized in the screen locker app
    (this causes the locker windows to be created)
* writing to stdout, and listening for readyRead on the ksmserver side

this should probably go into the stable branch as well, but realy needs
broad testing first given that it touches ksmserver, security, sleep, etc.

CCMAIL:plasma-devel at kde.org

M  +0    -1    ksmserver/screenlocker/greeter/greeterapp.cpp
M  +3    -1    ksmserver/screenlocker/greeter/greeterapp.h
M  +8    -0    ksmserver/screenlocker/greeter/main.cpp
M  +4    -1    ksmserver/screenlocker/ksldapp.cpp
M  +7    -0    plasma/screensaver/shell/main.cpp

http://commits.kde.org/kde-workspace/62c2c398611b2e6ef6e1e38ed79bc9540fc02ec9

diff --git a/ksmserver/screenlocker/greeter/greeterapp.cpp b/ksmserver/screenlocker/greeter/greeterapp.cpp
index b70c9d6..e54c216 100644
--- a/ksmserver/screenlocker/greeter/greeterapp.cpp
+++ b/ksmserver/screenlocker/greeter/greeterapp.cpp
@@ -71,7 +71,6 @@ UnlockApp::UnlockApp()
     initialize();
     connect(desktop(), SIGNAL(resized(int)), SLOT(desktopResized()));
     connect(desktop(), SIGNAL(screenCountChanged(int)), SLOT(desktopResized()));
-    QMetaObject::invokeMethod(this, "desktopResized", Qt::QueuedConnection);
 }
 
 UnlockApp::~UnlockApp()
diff --git a/ksmserver/screenlocker/greeter/greeterapp.h b/ksmserver/screenlocker/greeter/greeterapp.h
index f332bfc..951b1e3 100644
--- a/ksmserver/screenlocker/greeter/greeterapp.h
+++ b/ksmserver/screenlocker/greeter/greeterapp.h
@@ -44,12 +44,14 @@ public:
 
     void setTesting(bool enable);
 
+public Q_SLOTS:
+    void desktopResized();
+
 protected:
     virtual bool eventFilter(QObject *obj, QEvent *event);
 
 private Q_SLOTS:
     void viewStatusChanged(const QDeclarativeView::Status &status);
-    void desktopResized();
     void resetRequestIgnore();
     void suspendToRam();
     void suspendToDisk();
diff --git a/ksmserver/screenlocker/greeter/main.cpp b/ksmserver/screenlocker/greeter/main.cpp
index 180d64d..3d4de27 100644
--- a/ksmserver/screenlocker/greeter/main.cpp
+++ b/ksmserver/screenlocker/greeter/main.cpp
@@ -20,6 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <KDE/KCmdLineArgs>
 #include <KDE/KLocale>
 #include <KDE/KGlobal>
+#include <QDateTime>
+
+#include <iostream>
 
 #include "greeterapp.h"
 
@@ -63,5 +66,10 @@ int main(int argc, char* argv[])
         app.setTesting(true);
     }
     args->clear();
+    app.desktopResized();
+
+    // 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;
     return app.exec();
 }
diff --git a/ksmserver/screenlocker/ksldapp.cpp b/ksmserver/screenlocker/ksldapp.cpp
index 7f2e671..6a6fad8 100644
--- a/ksmserver/screenlocker/ksldapp.cpp
+++ b/ksmserver/screenlocker/ksldapp.cpp
@@ -277,10 +277,13 @@ bool KSldApp::startLockProcess()
     }
     m_lockProcess->start();
     // we wait one minute
-    if (!m_lockProcess->waitForStarted()) {
+    if (m_lockProcess->waitForStarted(60000)) {
+        m_lockProcess->waitForReadyRead(60000);
+    } else {
         m_lockProcess->kill();
         return false;
     }
+
     return true;
 }
 
diff --git a/plasma/screensaver/shell/main.cpp b/plasma/screensaver/shell/main.cpp
index be151aa..a70bcdf 100644
--- a/plasma/screensaver/shell/main.cpp
+++ b/plasma/screensaver/shell/main.cpp
@@ -21,6 +21,10 @@
 #include <KLocale>
 #include <KIcon>
 
+#include <QDateTime>
+
+#include <iostream>
+
 #include <config-workspace.h>
 #include "plasmaapp.h"
 
@@ -55,6 +59,9 @@ int main(int argc, char **argv)
     KGlobal::locale()->insertCatalog(QLatin1String( "libkworkspace" ));
     KGlobal::locale()->insertCatalog(QLatin1String( "kscreenlocker_greet" ));
     app->disableSessionManagement(); // I assume we'd never want a screensaver thing reppearing on login?
+    // 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;
     int rc = app->exec();
     delete app;
     return rc;


More information about the Plasma-devel mailing list