summaryrefslogtreecommitdiffstats
path: root/kde/patch
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2018-08-12 22:11:58 +0200
committer Eric Hameleers <alien@slackware.com>2018-08-12 22:11:58 +0200
commit0dcd071e79365d621f75c9c4ca4ba38ade2dc389 (patch)
treef2522f1440864f96f09098c901945c83e5352c11 /kde/patch
parent6e33bf90d74269de6e201c6793b7fd6ea721d1cb (diff)
downloadktown-0dcd071e79365d621f75c9c4ca4ba38ade2dc389.tar.gz
ktown-0dcd071e79365d621f75c9c4ca4ba38ade2dc389.tar.xz
Backport two kscreenlocker patches from the 5.14 branch
- Force software rendering when greeter crashed: - Load QtQuickSettings for software rendering (KDEBUG #347772): In particular the second patch eliminates 100% CPU usage in the lockscreen in case you have older hardware and rely on software rendering. I think this warrants the backport into Slackware's Plasma5 Desktop.
Diffstat (limited to 'kde/patch')
-rw-r--r--kde/patch/kscreenlocker.patch8
-rw-r--r--kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch112
-rw-r--r--kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch49
3 files changed, 169 insertions, 0 deletions
diff --git a/kde/patch/kscreenlocker.patch b/kde/patch/kscreenlocker.patch
index ea170b8..7e48859 100644
--- a/kde/patch/kscreenlocker.patch
+++ b/kde/patch/kscreenlocker.patch
@@ -2,3 +2,11 @@
# Dont quit the Greeter when last window closes.
#cat $CWD/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+# Backport two important stability fixes from 5.14 -
+# Force software rendering when greeter crashed:
+cat $CWD/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+# Load QtQuickSettings for software rendering (KDEBUG #347772):
+cat $CWD/patch/kscreenlocker/kscreenlocker_rendersettings.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+
+
diff --git a/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch b/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch
new file mode 100644
index 0000000..06045d7
--- /dev/null
+++ b/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch
@@ -0,0 +1,112 @@
+From 875e44f56d4597ba3b65f5bf4ff2b315376c05a4 Mon Sep 17 00:00:00 2001
+From: Kai Uwe Broulik <kde@privat.broulik.de>
+Date: Wed, 11 Jul 2018 18:01:41 +0200
+Subject: Force software rendering when greeter crashed
+
+We have a fallback QML theme for when the look and feel package is broken but when the
+graphics driver is broken (e.g. proprietary graphics driver update) the lock screen would
+stop working. When the greeter crashed, better play safe and force software rendering
+
+Reviewed-By: d_ed
+---
+ ksldapp.cpp | 13 +++++++++++--
+ ksldapp.h | 9 +++++++++
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/ksldapp.cpp b/ksldapp.cpp
+index 892826f..5fe28ea 100644
+--- a/ksldapp.cpp
++++ b/ksldapp.cpp
+@@ -66,6 +66,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ namespace ScreenLocker
+ {
+
++static const QString s_qtQuickBackend = QStringLiteral("QT_QUICK_BACKEND");
++
+ static KSldApp * s_instance = nullptr;
+
+ KSldApp* KSldApp::self()
+@@ -226,6 +228,8 @@ void KSldApp::initialize()
+ // failure, restart lock process
+ m_greeterCrashedCounter++;
+ if (m_greeterCrashedCounter < 4) {
++ // Perhaps it crashed due to a graphics driver issue, force software rendering now
++ setForceSoftwareRendering(true);
+ startLockProcess(EstablishLock::Immediate);
+ } else if (m_lockWindow) {
+ m_lockWindow->emergencyShow();
+@@ -385,6 +389,7 @@ void KSldApp::lock(EstablishLock establishLock)
+
+ m_lockState = AcquiringLock;
+
++ setForceSoftwareRendering(false);
+ // start unlock screen process
+ startLockProcess(establishLock);
+ emit lockStateChanged();
+@@ -546,6 +551,8 @@ bool KSldApp::isFdoPowerInhibited() const
+
+ void KSldApp::startLockProcess(EstablishLock establishLock)
+ {
++ QProcessEnvironment env = m_greeterEnv;
++
+ if (m_isWayland && m_waylandDisplay) {
+ int sx[2];
+ if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sx) < 0) {
+@@ -566,9 +573,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
+ emit greeterClientConnectionChanged();
+ int socket = dup(sx[1]);
+ if (socket >= 0) {
+- QProcessEnvironment env = m_greeterEnv;
+ env.insert("WAYLAND_SOCKET", QByteArray::number(socket));
+- m_lockProcess->setProcessEnvironment(env);
+ }
+ }
+ QStringList args;
+@@ -587,6 +592,9 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
+ if (m_lockGrace == -1) {
+ args << QStringLiteral("--nolock");
+ }
++ if (m_forceSoftwareRendering) {
++ env.insert(s_qtQuickBackend, QStringLiteral("software"));
++ }
+
+ // start the Wayland server
+ int fd = m_waylandServer->start();
+@@ -598,6 +606,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
+ args << QStringLiteral("--ksldfd");
+ args << QString::number(fd);
+
++ m_lockProcess->setProcessEnvironment(env);
+ m_lockProcess->start(QStringLiteral(KSCREENLOCKER_GREET_BIN), args);
+ close(fd);
+ }
+diff --git a/ksldapp.h b/ksldapp.h
+index 4849588..b6d6703 100644
+--- a/ksldapp.h
++++ b/ksldapp.h
+@@ -127,6 +127,14 @@ public:
+ m_lockGrace = msec;
+ }
+
++ bool forceSoftwareRendering() const {
++ return m_forceSoftwareRendering;
++ }
++
++ void setForceSoftwareRendering(bool force) {
++ m_forceSoftwareRendering = force;
++ }
++
+ Q_SIGNALS:
+ void locked();
+ void unlocked();
+@@ -179,6 +187,7 @@ private:
+ LogindIntegration *m_logind;
+ GlobalAccel *m_globalAccel = nullptr;
+ bool m_hasXInput2 = false;
++ bool m_forceSoftwareRendering = false;
+
+ bool m_isX11;
+ bool m_isWayland;
+--
+cgit v0.11.2
+
diff --git a/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch b/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch
new file mode 100644
index 0000000..2802a1a
--- /dev/null
+++ b/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch
@@ -0,0 +1,49 @@
+From 3f104cbb0a34024dc1aa45538d2ef2403a7a45f0 Mon Sep 17 00:00:00 2001
+From: David Edmundson <kde@davidedmundson.co.uk>
+Date: Fri, 10 Aug 2018 01:18:42 +0200
+Subject: Load QtQuickSettings for software rendering
+
+We had support for falling back on errors yet somehow
+the initial basic loading was missing.
+
+Summary: BUG: 347772
+
+Test Plan: Compiles
+
+Reviewers: #plasma, broulik
+
+Reviewed By: #plasma, broulik
+
+Subscribers: plasma-devel
+
+Tags: #plasma
+
+Differential Revision: https://phabricator.kde.org/D14708
+---
+ greeter/main.cpp | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/greeter/main.cpp b/greeter/main.cpp
+index ff64a55..6db87e1 100644
+--- a/greeter/main.cpp
++++ b/greeter/main.cpp
+@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *********************************************************************/
+ #include <KLocalizedString>
++#include <KQuickAddons/QtQuickSettings>
+
+ #include <QDateTime>
+ #include <QCommandLineParser>
+@@ -85,6 +86,8 @@ int main(int argc, char* argv[])
+ QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
+ QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
+
++ KQuickAddons::QtQuickSettings::init();
++
+ // disable session management for the greeter
+ auto disableSessionManagement = [](QSessionManager &sm) {
+ sm.setRestartHint(QSessionManager::RestartNever);
+--
+cgit v0.11.2
+