File 0001-Add-platform-detection-and-adjustment-to-kded.patch of Package kded

From e213b408ac85f54d01eab82f71bc4210a92a28e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= <mgraesslin@kde.org>
Date: Wed, 28 Mar 2018 10:28:02 +0200
Subject: [PATCH] Add platform detection and adjustment to kded

Summary:
Current Plasma/master branch does no longer set the QT_QPA_PLATFORM env
variable on Wayland. As kded is a process tightly connected to the
workspace it also needs to pick wayland QPA in a Wayland session. This
change brings in the adjustment from plasma-workspace and ensures that
kded works correctly on any Wayland desktop environment, being it
Plasma, GNOME or Weston.

Test Plan: Restarted session, kscreen got layout correctly

Reviewers: #frameworks, #plasma, apol, romangg

Reviewed By: #plasma, romangg

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D11583
---
 src/kded.cpp | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/kded.cpp b/src/kded.cpp
index b1f02ea..182555e 100644
--- a/src/kded.cpp
+++ b/src/kded.cpp
@@ -689,6 +689,33 @@ static void setupAppInfo(QApplication *app)
     app->setApplicationVersion(QStringLiteral(KDED_VERSION_STRING));
 }
 
+static bool detectPlatform(int argc, char **argv)
+{
+    if (qEnvironmentVariableIsSet("QT_QPA_PLATFORM")) {
+        return false;
+    }
+    for (int i = 0; i < argc; i++) {
+        if (qstrcmp(argv[i], "-platform") == 0 ||
+                qstrcmp(argv[i], "--platform") == 0 ||
+                QByteArray(argv[i]).startsWith("-platform=") ||
+                QByteArray(argv[i]).startsWith("--platform=")) {
+            return false;
+        }
+    }
+    const QByteArray sessionType = qgetenv("XDG_SESSION_TYPE");
+    if (sessionType.isEmpty()) {
+        return false;
+    }
+    if (qstrcmp(sessionType, "wayland") == 0) {
+        qputenv("QT_QPA_PLATFORM", "wayland");
+        return true;
+    } else if (qstrcmp(sessionType, "x11") == 0) {
+        qputenv("QT_QPA_PLATFORM", "xcb");
+        return true;
+    }
+    return false;
+}
+
 extern "C" Q_DECL_EXPORT int kdemain(int argc, char *argv[])
 {
 #ifdef Q_OS_OSX
@@ -710,11 +737,16 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char *argv[])
     // WABA: Make sure not to enable session management.
     qunsetenv("SESSION_MANAGER");
 
+    const bool unsetQpa = detectPlatform(argc, argv);
+
     // In older versions, QApplication creation was postponed until after
     // testing for --check, in which case, only a QCoreApplication was created.
     // Since that option is no longer used at startup, we removed that speed
     // optimization for code clarity and easier support of standard parameters.
     QApplication app(argc, argv);
+    if (unsetQpa) {
+        qunsetenv("QT_QPA_PLATFORM");
+    }
     setupAppInfo(&app);
     app.setQuitOnLastWindowClosed(false);
 
-- 
2.16.2

openSUSE Build Service is sponsored by