Hello community,

here is the log from the commit of package plasma5-workspace for 
openSUSE:Factory checked in at 2018-03-30 12:06:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/plasma5-workspace (Old)
 and      /work/SRC/openSUSE:Factory/.plasma5-workspace.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "plasma5-workspace"

Fri Mar 30 12:06:38 2018 rev:88 rq:592013 version:5.12.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/plasma5-workspace/plasma5-workspace.changes      
2018-03-20 21:49:51.676364100 +0100
+++ /work/SRC/openSUSE:Factory/.plasma5-workspace.new/plasma5-workspace.changes 
2018-03-30 12:06:53.690879217 +0200
@@ -1,0 +2,46 @@
+Wed Mar 28 11:46:36 UTC 2018 - [email protected]
+
+- Don't require plasma5-workspace in plasma5-workspace-devel,
+  it pulls in a lot of unnecessary requirements and can cause
+  build loops
+
+-------------------------------------------------------------------
+Tue Mar 27 15:40:48 CEST 2018 - [email protected]
+
+- Update to 5.12.4
+  * New bugfix release
+  * For more details please see:
+  * https://www.kde.org/announcements/plasma-5.12.4.php
+- Changes since 5.12.3:
+  * [notifications applet] Fix two qml warnings about assigning [undefined]
+  * Remove long-time deprecated Encoding=UTF-8 from desktop format files
+  * [Run Command] Pass "event" to runCurrentIndex
+  * Move to KRunner's second results item with a single keypress (kde#392197)
+  * Pass proper click coordinates to SNI ContextMenu calls
+  * libdbusmenu-qt: Remove nonexistant actions directly from the menu
+  * Set a transient parent for SNI context menus
+  * [DeviceNotifications Engine] Never show safely remove message when 
mounting (kde#391180)
+  * Use dbus-run-session instead of dbus-launch --exit-with-session
+  * [System Tray] Fix hiding applets with HiddenStatus
+  * [Notifications] Remove NoAccessNetworkAccessManagerFactory
+  * Improve By Desktop sorting for task groups (kde#384747)
+  * Use separate config group for each wallpaper plugin
+  * Fix duplicated [Desktop Entry] sections in two menu directory files
+- Remove patches, now upstream:
+  * 0001-Use-dbus-run-session-instead-of-dbus-launch-exit-wit.patch
+
+-------------------------------------------------------------------
+Sat Mar 24 11:11:34 UTC 2018 - [email protected]
+
+- Add patches to not set QT_QPA_PLATFORM in a wayland session:
+  * 0001-Call-KLocalizedString-setApplicationDomain-after-Q-A.patch
+  * 0002-Add-platform-detection-to-KWorkspace-library-to-adju.patch
+  * 0003-No-longer-export-QT_QPA_PLATFORM-env-variable-to-the.patch
+  * 0001-Set-XDG_SESSION_TYPE-wayland-in-startplasmacomposito.patch
+- Set GDK_BACKEND=x11 to work around GTK3 bugs:
+  * 0001-Set-GTK_BACKEND-x11-in-a-wayland-session.patch
+- Add a suffix to the wayland session's name:
+  * 0001-Add-suffix-to-the-wayland-session-s-name.patch
+- Apply upstream patches before downstream patches
+
+-------------------------------------------------------------------

Old:
----
  0001-Use-dbus-run-session-instead-of-dbus-launch-exit-wit.patch
  plasma-workspace-5.12.3.tar.xz

New:
----
  0001-Add-suffix-to-the-wayland-session-s-name.patch
  0001-Call-KLocalizedString-setApplicationDomain-after-Q-A.patch
  0001-Set-GTK_BACKEND-x11-in-a-wayland-session.patch
  0001-Set-XDG_SESSION_TYPE-wayland-in-startplasmacomposito.patch
  0002-Add-platform-detection-to-KWorkspace-library-to-adju.patch
  0003-No-longer-export-QT_QPA_PLATFORM-env-variable-to-the.patch
  plasma-workspace-5.12.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ plasma5-workspace.spec ++++++
--- /var/tmp/diff_new_pack.2bWMEM/_old  2018-03-30 12:06:57.158753829 +0200
+++ /var/tmp/diff_new_pack.2bWMEM/_new  2018-03-30 12:06:57.162753685 +0200
@@ -27,7 +27,7 @@
 %{!?_plasma5_bugfix: %global _plasma5_bugfix %{version}}
 # Lasted ABI-stable Plasma (e.g. 5.8 in KF5, but 5.9.1 in KUF)
 %{!?_plasma5_version: %global _plasma5_version %(echo %{_plasma5_bugfix} | awk 
-F. '{print $1"."$2}')}
-Version:        5.12.3
+Version:        5.12.4
 Release:        0
 Summary:        The KDE Plasma Workspace Components
 License:        GPL-2.0+
@@ -35,13 +35,21 @@
 Url:            http://www.kde.org/
 Source:         
http://download.kde.org/stable/plasma/%{version}/plasma-workspace-%{version}.tar.xz
 Source1:        baselibs.conf
+# PATCHES 000-100 and above are from upstream 5.12 branch
+# PATCHES 101-500 are from upstream master/5.13 branch
+Patch201:       0001-Call-KLocalizedString-setApplicationDomain-after-Q-A.patch
+Patch202:       0002-Add-platform-detection-to-KWorkspace-library-to-adju.patch
+Patch203:       0003-No-longer-export-QT_QPA_PLATFORM-env-variable-to-the.patch
+# PATCHES 501-??? are PATCH-FIX-OPENSUSE
 # PATCH-FIX-OPENSUSE 0001-Rename-qdbus-in-startkde.patch [email protected] 
-- Rename the qdbus executable in startkde
-Patch0:         0001-Rename-qdbus-in-startkde.patch
+Patch501:       0001-Rename-qdbus-in-startkde.patch
 # PATCH-FIX-OPENSUSE 0001-Ignore-default-sddm-face-icons.patch boo#1001364 
[email protected] -- Ignore default sddm face icons
-Patch1:         0001-Ignore-default-sddm-face-icons.patch
-# PATCHES 100-200 and above are from upstream 5.12 branch
-Patch100:       0001-Use-dbus-run-session-instead-of-dbus-launch-exit-wit.patch
-# PATCHES 201-300 and above are from upstream master/5.13 branch
+Patch502:       0001-Ignore-default-sddm-face-icons.patch
+Patch503:       0001-Set-GTK_BACKEND-x11-in-a-wayland-session.patch
+# PATCH-FIX-UPSTREAM (once sddm part merged)
+Patch504:       0001-Add-suffix-to-the-wayland-session-s-name.patch
+# PATCH-FIX-UPSTRAM (or alternative solution)
+Patch505:       0001-Set-XDG_SESSION_TYPE-wayland-in-startplasmacomposito.patch
 BuildRequires:  breeze5-icons
 BuildRequires:  fdupes
 BuildRequires:  kf5-filesystem
@@ -194,7 +202,6 @@
 %package devel
 Summary:        The KDE Plasma Workspace Components
 Group:          Development/Libraries/KDE
-Requires:       %{name} >= %{version}
 Requires:       %{name}-libs = %{version}-%{release}
 Requires:       cmake(KF5SysGuard) >= %{_plasma5_version}
 Requires:       cmake(KF5Wayland) >= %{kf5_version}

++++++ 0001-Add-suffix-to-the-wayland-session-s-name.patch ++++++
>From e430354b3628d250cba1e271ddc13024b4f59d8a Mon Sep 17 00:00:00 2001
From: Fabian Vogt <[email protected]>
Date: Sat, 24 Mar 2018 14:51:47 +0100
Subject: [PATCH] Add suffix to the wayland session's name

Sddm added the prefix previously, this is not the case anymore.
---
 plasmawayland.desktop.cmake | 46 +--------------------------------------------
 1 file changed, 1 insertion(+), 45 deletions(-)

diff --git a/plasmawayland.desktop.cmake b/plasmawayland.desktop.cmake
index 5d7db306..d2f98ee0 100644
--- a/plasmawayland.desktop.cmake
+++ b/plasmawayland.desktop.cmake
@@ -2,51 +2,7 @@
 Exec=dbus-run-session ${CMAKE_INSTALL_FULL_BINDIR}/startplasmacompositor
 TryExec=${CMAKE_INSTALL_FULL_BINDIR}/startplasmacompositor
 DesktopNames=KDE
-Name=Plasma
-Name[ar]=بلازما
-Name[bs]=Plazma
-Name[ca]=Plasma
-Name[ca@valencia]=Plasma
-Name[cs]=Plasma
-Name[da]=Plasma
-Name[de]=Plasma
-Name[el]=Plasma
-Name[en_GB]=Plasma
-Name[es]=Plasma
-Name[et]=Plasma
-Name[eu]=Plasma
-Name[fi]=Plasma
-Name[fr]=Plasma
-Name[gl]=Plasma
-Name[he]=פלזמה
-Name[hu]=Plasma
-Name[id]=Plasma
-Name[is]=Plasma
-Name[it]=Plasma
-Name[ja]=プラズマ
-Name[ko]=Plasma
-Name[lt]=Plasma
-Name[nb]=Plasma
-Name[nds]=Plasma
-Name[nl]=Plasma
-Name[nn]=Plasma
-Name[pa]=ਪਲਾਜ਼ਮਾ
-Name[pl]=Plazma
-Name[pt]=Plasma
-Name[pt_BR]=Plasma
-Name[ru]=Plasma
-Name[sk]=Plasma
-Name[sl]=Plasma
-Name[sr]=Плазма
-Name[sr@ijekavian]=Плазма
-Name[sr@ijekavianlatin]=Plasma
-Name[sr@latin]=Plasma
-Name[sv]=Plasma
-Name[tr]=Plama
-Name[uk]=Плазма
-Name[x-test]=xxPlasmaxx
-Name[zh_CN]=Plasma
-Name[zh_TW]=Plasma
+Name=Plasma (Wayland)
 Comment=Plasma by KDE
 Comment[ar]=بلازما كدي
 Comment[bs]=Plazma od strane KDe
-- 
2.16.2

++++++ 0001-Call-KLocalizedString-setApplicationDomain-after-Q-A.patch ++++++
>From 6eb5d00b48a67b415c0770434dbb6bc8a0e6d9d9 Mon Sep 17 00:00:00 2001
From: "Friedrich W. H. Kossebau" <[email protected]>
Date: Sat, 10 Feb 2018 00:34:10 +0100
Subject: [PATCH 1/3] Call KLocalizedString::setApplicationDomain after Q*App
 creation

As now recommended, to ensure all locale settings are done from Qt side
---
 klipper/main.cpp          | 2 +-
 krunner/main.cpp          | 3 +--
 shell/main.cpp            | 3 +--
 startkde/kcminit/main.cpp | 2 +-
 systemmonitor/main.cpp    | 3 +--
 5 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/klipper/main.cpp b/klipper/main.cpp
index 58a07783..36539b63 100644
--- a/klipper/main.cpp
+++ b/klipper/main.cpp
@@ -34,8 +34,8 @@
 
 extern "C" int Q_DECL_EXPORT kdemain(int argc, char *argv[])
 {
-  KLocalizedString::setApplicationDomain("klipper");
   QApplication app(argc, argv);
+  KLocalizedString::setApplicationDomain("klipper");
 
   KAboutData aboutData(QStringLiteral("klipper"),
                        i18n("Klipper"),
diff --git a/krunner/main.cpp b/krunner/main.cpp
index b63156d2..24fe5a9f 100644
--- a/krunner/main.cpp
+++ b/krunner/main.cpp
@@ -43,10 +43,9 @@ int main(int argc, char **argv)
     qunsetenv("QT_DEVICE_PIXEL_RATIO");
     QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
 
-    KLocalizedString::setApplicationDomain("krunner");
-
     QQuickWindow::setDefaultAlphaBuffer(true);
     QApplication app(argc, argv);
+    KLocalizedString::setApplicationDomain("krunner");
 
     KQuickAddons::QtQuickSettings::init();
 
diff --git a/shell/main.cpp b/shell/main.cpp
index ed42ed40..22ef0388 100644
--- a/shell/main.cpp
+++ b/shell/main.cpp
@@ -56,9 +56,8 @@ int main(int argc, char *argv[])
 
     QQuickWindow::setDefaultAlphaBuffer(true);
 
-    KLocalizedString::setApplicationDomain("plasmashell");
-
     QApplication app(argc, argv);
+    KLocalizedString::setApplicationDomain("plasmashell");
 
     // The executable's path is added to the library/plugin paths.
     // This does not make much sense for plasmashell.
diff --git a/startkde/kcminit/main.cpp b/startkde/kcminit/main.cpp
index 6d6692b9..7181281c 100644
--- a/startkde/kcminit/main.cpp
+++ b/startkde/kcminit/main.cpp
@@ -221,9 +221,9 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char *argv[])
 
   startup = ( strcmp( argv[ 0 ], "kcminit_startup" ) == 0 ); // started from 
startkde?
 
-  KLocalizedString::setApplicationDomain("kcminit");
   QGuiApplication::setDesktopSettingsAware(false);
   QGuiApplication app(argc, argv); //gui is needed for several modules
+  KLocalizedString::setApplicationDomain("kcminit");
   KAboutData about(QStringLiteral("kcminit"), i18n("KCMInit"), QString(),
                    i18n("KCMInit - runs startup initialization for Control 
Modules."), KAboutLicense::GPL);
   KAboutData::setApplicationData(about);
diff --git a/systemmonitor/main.cpp b/systemmonitor/main.cpp
index 5e6be4f8..ccf6cae7 100644
--- a/systemmonitor/main.cpp
+++ b/systemmonitor/main.cpp
@@ -25,9 +25,8 @@
 
 int main(int argc, char** argv)
 {
-    KLocalizedString::setApplicationDomain("systemmonitor");
-
     QApplication app(argc, argv);
+    KLocalizedString::setApplicationDomain("systemmonitor");
 
     app.setOrganizationDomain(QStringLiteral("kde.org"));
     app.setDesktopFileName(QStringLiteral("org.kde.systemmonitor"));
-- 
2.16.2

++++++ 0001-Set-GTK_BACKEND-x11-in-a-wayland-session.patch ++++++
>From 6de8c88ad78bb5b3d6e599b7dacd1b2359cf4fbb Mon Sep 17 00:00:00 2001
From: Fabian Vogt <[email protected]>
Date: Sat, 24 Mar 2018 12:15:10 +0100
Subject: [PATCH] Set GTK_BACKEND=x11 in a wayland session

Works around missing window decorations and broken config file reading.
---
 startkde/startplasmacompositor.cmake | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/startkde/startplasmacompositor.cmake 
b/startkde/startplasmacompositor.cmake
index dd9e304d..53be3be8 100644
--- a/startkde/startplasmacompositor.cmake
+++ b/startkde/startplasmacompositor.cmake
@@ -174,6 +174,10 @@ 
XDG_DATA_DIRS="@KDE_INSTALL_FULL_DATADIR@:/usr/share:/usr/local/share"
 fi
 export XDG_DATA_DIRS
 
+# GTK3 uses the wayland backend by default, but its implementation is not 
correct
+# enough to work well here. Window decorations are missing, for instance.
+export GDK_BACKEND=x11
+
 # Make sure that D-Bus is running
 if qdbus-qt5 >/dev/null 2>/dev/null; then
     : # ok
-- 
2.16.2

++++++ 0001-Set-XDG_SESSION_TYPE-wayland-in-startplasmacomposito.patch ++++++
>From f7fd48a7103c20e1484d7d07de650729ff48eda5 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <[email protected]>
Date: Sat, 24 Mar 2018 19:43:19 +0100
Subject: [PATCH] Set XDG_SESSION_TYPE=wayland in startplasmacompositor

KWorkSpace::detectPlatform uses that, so make sure it's set.
---
 startkde/startplasmacompositor.cmake | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/startkde/startplasmacompositor.cmake 
b/startkde/startplasmacompositor.cmake
index 53be3be8..7be28e32 100644
--- a/startkde/startplasmacompositor.cmake
+++ b/startkde/startplasmacompositor.cmake
@@ -222,6 +222,9 @@ export KDE_SESSION_UID
 XDG_CURRENT_DESKTOP=KDE
 export XDG_CURRENT_DESKTOP
 
+XDG_SESSION_TYPE=wayland
+export XDG_SESSION_TYPE
+
 # kwin_wayland can possibly also start dbus-activated services which need env 
variables.
 # In that case, the update in startplasma might be too late.
 if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
-- 
2.16.2

++++++ 0002-Add-platform-detection-to-KWorkspace-library-to-adju.patch ++++++
>From 909eff21cca3cdb08ed683b126d83e20aa266608 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= <[email protected]>
Date: Sun, 25 Feb 2018 09:15:07 +0100
Subject: [PATCH 2/3] Add platform detection to KWorkspace library to adjust
 QT_QPA_PLATFORM

Summary:
This is a preparation step to unset QT_QPA_PLATFORM from the wayland
startup session script. Setting QT_QPA_PLATFORM breaks 3rd-party Qt
software which does not bundle QtWayland. Most prominent example is
the Qt installer itself (see
https://bugreports.qt.io/browse/QTBUG-60222).

On the other hand our Plasma workspace applications need to be forced to
Wayland on a Wayland system. So we have a conflict between we want to
set QT_QPA_PLATFORM and we don't want to set QT_QPA_PLATFORM.

This change adds new API to KWorkspace to address this problem. The new
method adjusts the QT_QPA_PLATFORM based on the XDG_SESSION_TYPE
enviornment variable. It is completely opt-in. Meaning applications need
to explicitly add the call prior to creating the QGuiApplication and if
the user specifies either QT_QPA_PLATFORM env variable or any of the
-platform command line argument variants, the platform detection is
skipped.

The change also adjusts all plasma-workspace applications which should
use Wayland on Wayland to use the new API. The startup script on the
other hand still sets QT_QPA_PLATFORM. We also have applications outside
of plasma-workspace which needs this detection. Examples are:
 * powerdevil
 * systemsettings
 * kinfocenter

Once this change is merged those applications can be adjusted by linking
against PW::KWorkspace and afterwards QT_QPA_PLATFORM can be unset from
startplasmacompositor.

Test Plan: See added autotest

Reviewers: #plasma

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D10816
---
 krunner/CMakeLists.txt                            |   3 +-
 krunner/main.cpp                                  |   2 +
 ksmserver/logout-greeter/main.cpp                 |   1 +
 ksmserver/switchuser-greeter/main.cpp             |   1 +
 ksplash/ksplashqml/CMakeLists.txt                 |   1 +
 ksplash/ksplashqml/main.cpp                       |   3 +
 kuiserver/CMakeLists.txt                          |   1 +
 kuiserver/main.cpp                                |   3 +
 libkworkspace/CMakeLists.txt                      |   4 +
 libkworkspace/autotests/CMakeLists.txt            |   5 +
 libkworkspace/autotests/testPlatformDetection.cpp | 128 ++++++++++++++++++++++
 libkworkspace/kworkspace.cpp                      |  24 ++++
 libkworkspace/kworkspace.h                        |  15 +++
 shell/CMakeLists.txt                              |   1 +
 shell/main.cpp                                    |   2 +
 startkde/kcminit/CMakeLists.txt                   |   4 +-
 startkde/kcminit/main.cpp                         |   2 +
 systemmonitor/CMakeLists.txt                      |   1 +
 systemmonitor/main.cpp                            |   3 +
 19 files changed, 201 insertions(+), 3 deletions(-)
 create mode 100644 libkworkspace/autotests/CMakeLists.txt
 create mode 100644 libkworkspace/autotests/testPlatformDetection.cpp

diff --git a/krunner/CMakeLists.txt b/krunner/CMakeLists.txt
index c73216e4..46aa92f8 100644
--- a/krunner/CMakeLists.txt
+++ b/krunner/CMakeLists.txt
@@ -23,6 +23,7 @@ target_link_libraries(krunner
     KF5::Crash
     KF5::WaylandClient
     KF5::QuickAddons
+    PW::KWorkspace
 )
 target_compile_definitions(krunner PRIVATE 
-DPROJECT_VERSION="${PROJECT_VERSION}")
 
@@ -38,4 +39,4 @@ 
ecm_configure_package_config_file(KRunnerAppDBusInterfaceConfig.cmake.in
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/KRunnerAppDBusInterfaceConfig.cmake
     DESTINATION ${CMAKECONFIG_INSTALL_DIR})
 
-add_subdirectory(update)
\ No newline at end of file
+add_subdirectory(update)
diff --git a/krunner/main.cpp b/krunner/main.cpp
index 24fe5a9f..06bf47c0 100644
--- a/krunner/main.cpp
+++ b/krunner/main.cpp
@@ -33,6 +33,7 @@
 #include <kdeclarative/qmlobject.h>
 #include <KQuickAddons/QtQuickSettings>
 
+#include <kworkspace.h>
 
 #include "view.h"
 
@@ -43,6 +44,7 @@ int main(int argc, char **argv)
     qunsetenv("QT_DEVICE_PIXEL_RATIO");
     QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
 
+    KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
     QApplication app(argc, argv);
     KLocalizedString::setApplicationDomain("krunner");
diff --git a/ksmserver/logout-greeter/main.cpp 
b/ksmserver/logout-greeter/main.cpp
index a94442be..369bc08f 100644
--- a/ksmserver/logout-greeter/main.cpp
+++ b/ksmserver/logout-greeter/main.cpp
@@ -166,6 +166,7 @@ int main(int argc, char *argv[])
     // Qt does not currently (5.9.4) support fullscreen on xdg_shell v6.
     qputenv("QT_WAYLAND_SHELL_INTEGRATION", "wl-shell");
 
+    KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
     QApplication app(argc, argv);
 
diff --git a/ksmserver/switchuser-greeter/main.cpp 
b/ksmserver/switchuser-greeter/main.cpp
index cbacb9fc..22200a43 100644
--- a/ksmserver/switchuser-greeter/main.cpp
+++ b/ksmserver/switchuser-greeter/main.cpp
@@ -138,6 +138,7 @@ int main(int argc, char *argv[])
     // Qt does not currently (5.9.4) support fullscreen on xdg_shell v6.
     qputenv("QT_WAYLAND_SHELL_INTEGRATION", "wl-shell");
 
+    KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
     QGuiApplication app(argc, argv);
 
diff --git a/ksplash/ksplashqml/CMakeLists.txt 
b/ksplash/ksplashqml/CMakeLists.txt
index 105cd022..b4ad34ef 100644
--- a/ksplash/ksplashqml/CMakeLists.txt
+++ b/ksplash/ksplashqml/CMakeLists.txt
@@ -16,6 +16,7 @@ target_link_libraries(ksplashqml
     KF5::QuickAddons
     KF5::WaylandClient
     KF5::WindowSystem
+    PW::KWorkspace
    )
 
 install(TARGETS ksplashqml ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
diff --git a/ksplash/ksplashqml/main.cpp b/ksplash/ksplashqml/main.cpp
index 25faacde..a97c3d60 100644
--- a/ksplash/ksplashqml/main.cpp
+++ b/ksplash/ksplashqml/main.cpp
@@ -23,6 +23,8 @@
 
 #include <QTextStream>
 
+#include <kworkspace.h>
+
 #include <iostream>
 #include <unistd.h>
 
@@ -88,6 +90,7 @@ int main(int argc, char **argv)
     //enable to send log output to /tmp/ksplash
     //which is useful for debugging
 //     qInstallMsgHandler(myMessageHandler);
+    KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
     SplashApp app(argc, argv);
 
diff --git a/kuiserver/CMakeLists.txt b/kuiserver/CMakeLists.txt
index 7e79076e..4787b828 100644
--- a/kuiserver/CMakeLists.txt
+++ b/kuiserver/CMakeLists.txt
@@ -60,6 +60,7 @@ endif ()
 
 
 target_link_libraries(kdeinit_kuiserver5
+    PW::KWorkspace
     Qt5::DBus
     KF5::ConfigWidgets
     KF5::DBusAddons
diff --git a/kuiserver/main.cpp b/kuiserver/main.cpp
index 2d8a5b6f..07df24a6 100644
--- a/kuiserver/main.cpp
+++ b/kuiserver/main.cpp
@@ -27,12 +27,15 @@
 
 #include <kdbusservice.h>
 
+#include <kworkspace.h>
+
 #include <QCommandLineParser>
 
 Q_LOGGING_CATEGORY(KUISERVER, "kuiserver", QtInfoMsg)
 
 extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
 {
+    KWorkSpace::detectPlatform(argc, argv);
     QApplication app(argc, argv);
     app.setApplicationName(QStringLiteral("kuiserver"));
     app.setApplicationVersion(QStringLiteral("2.0"));
diff --git a/libkworkspace/CMakeLists.txt b/libkworkspace/CMakeLists.txt
index b31ffc69..0f779040 100644
--- a/libkworkspace/CMakeLists.txt
+++ b/libkworkspace/CMakeLists.txt
@@ -73,3 +73,7 @@ install(EXPORT libkworkspaceLibraryTargets
         NAMESPACE PW::
         DESTINATION ${CMAKECONFIG_INSTALL_DIR}
         FILE LibKWorkspaceLibraryTargets.cmake )
+
+if(BUILD_TESTING)
+    add_subdirectory(autotests)
+endif()
diff --git a/libkworkspace/autotests/CMakeLists.txt 
b/libkworkspace/autotests/CMakeLists.txt
new file mode 100644
index 00000000..4409dc6d
--- /dev/null
+++ b/libkworkspace/autotests/CMakeLists.txt
@@ -0,0 +1,5 @@
+include(ECMMarkAsTest)
+add_executable(testPlatformDetection testPlatformDetection.cpp)
+target_link_libraries(testPlatformDetection Qt5::Test PW::KWorkspace)
+add_test(NAME kworkspace-testPlatformDetection COMMAND testPlatformDetection)
+ecm_mark_as_test(testPlatformDetection)
diff --git a/libkworkspace/autotests/testPlatformDetection.cpp 
b/libkworkspace/autotests/testPlatformDetection.cpp
new file mode 100644
index 00000000..8e06afb1
--- /dev/null
+++ b/libkworkspace/autotests/testPlatformDetection.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2018  Martin Flöser <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) version 3, or any
+ * later version accepted by the membership of KDE e.V. (or its
+ * successor approved by the membership of KDE e.V.), which shall
+ * act as a proxy defined in Section 6 of version 3 of the license.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see 
<http://www.gnu.org/licenses/>.
+*/
+
+#include <QtTest/QtTest>
+
+#include "../kworkspace.h"
+
+#include <vector>
+
+class TestPlatformDetection : public QObject
+{
+    Q_OBJECT
+private Q_SLOTS:
+    void init();
+    void testPlatformSelection_data();
+    void testPlatformSelection();
+    void testArguments_data();
+    void testArguments();
+    void testQtQpaPlatformIsSet_data();
+    void testQtQpaPlatformIsSet();
+};
+
+void TestPlatformDetection::init()
+{
+    qunsetenv("QT_QPA_PLATFORM");
+    qunsetenv("XDG_SESSION_TYPE");
+}
+
+void TestPlatformDetection::testPlatformSelection_data()
+{
+    QTest::addColumn<QByteArray>("xdgSessionType");
+    QTest::addColumn<QByteArray>("expectedQtQpaPlatform");
+
+    QTest::newRow("wayland") << QByteArrayLiteral("wayland") << 
QByteArrayLiteral("wayland");
+    QTest::newRow("x11") << QByteArrayLiteral("x11") << 
QByteArrayLiteral("xcb");
+    QTest::newRow("unknown") << QByteArrayLiteral("mir") << QByteArray();
+}
+
+void TestPlatformDetection::testPlatformSelection()
+{
+    QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM"));
+    QFETCH(QByteArray, xdgSessionType);
+    qputenv("XDG_SESSION_TYPE", xdgSessionType);
+
+    std::vector<QByteArray> cppArgv{
+        QByteArrayLiteral("testPlatformDetction")
+    };
+    std::vector<char*> argv;
+    for (QByteArray &arg : cppArgv) {
+        argv.push_back(arg.data());
+    }
+    KWorkSpace::detectPlatform(1, argv.data());
+    QTEST(qgetenv("QT_QPA_PLATFORM"), "expectedQtQpaPlatform");
+}
+
+void TestPlatformDetection::testArguments_data()
+{
+    QTest::addColumn<QByteArray>("arg");
+
+    QTest::newRow("-platform") << QByteArrayLiteral("-platform");
+    QTest::newRow("--platform") << QByteArrayLiteral("--platform");
+    QTest::newRow("-platform=wayland") << 
QByteArrayLiteral("-platform=wayland");
+    QTest::newRow("--platform=wayland") << 
QByteArrayLiteral("--platform=wayland");
+}
+
+void TestPlatformDetection::testArguments()
+{
+    QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM"));
+    qputenv("XDG_SESSION_TYPE", "wayland");
+
+    QFETCH(QByteArray, arg);
+    std::vector<QByteArray> cppArgv{
+        QByteArrayLiteral("testPlatformDetction"),
+        arg,
+        QByteArrayLiteral("wayland")
+    };
+    std::vector<char*> argv;
+    for (QByteArray &arg : cppArgv) {
+        argv.push_back(arg.data());
+    }
+    KWorkSpace::detectPlatform(3, argv.data());
+    QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM"));
+}
+
+void TestPlatformDetection::testQtQpaPlatformIsSet_data()
+{
+    QTest::addColumn<QByteArray>("qtQpaPlatform");
+    QTest::addColumn<QByteArray>("xdgSessionType");
+
+    QTest::newRow("xcb - x11") << QByteArrayLiteral("xcb") << 
QByteArrayLiteral("x11");
+    QTest::newRow("xcb - wayland") << QByteArrayLiteral("xcb") << 
QByteArrayLiteral("wayland");
+    QTest::newRow("wayland - x11") << QByteArrayLiteral("wayland") << 
QByteArrayLiteral("x11");
+    QTest::newRow("wayland - wayland") << QByteArrayLiteral("wayland") << 
QByteArrayLiteral("wayland");
+    QTest::newRow("windows - x11") << QByteArrayLiteral("windows") << 
QByteArrayLiteral("x11");
+}
+
+void TestPlatformDetection::testQtQpaPlatformIsSet()
+{
+    // test verifies that if QT_QPA_PLATFORM is set the env variable does not 
get adjusted
+    QFETCH(QByteArray, qtQpaPlatform);
+    QFETCH(QByteArray, xdgSessionType);
+    qputenv("QT_QPA_PLATFORM", qtQpaPlatform);
+    qputenv("XDG_SESSION_TYPE", xdgSessionType);
+
+    KWorkSpace::detectPlatform(0, nullptr);
+    QCOMPARE(qgetenv("QT_QPA_PLATFORM"), qtQpaPlatform);
+}
+
+QTEST_GUILESS_MAIN(TestPlatformDetection)
+
+#include "testPlatformDetection.moc"
diff --git a/libkworkspace/kworkspace.cpp b/libkworkspace/kworkspace.cpp
index 444270d8..5b0b2505 100644
--- a/libkworkspace/kworkspace.cpp
+++ b/libkworkspace/kworkspace.cpp
@@ -260,6 +260,30 @@ void propagateSessionManager()
 #endif
 }
 
+void detectPlatform(int argc, char **argv)
+{
+    if (qEnvironmentVariableIsSet("QT_QPA_PLATFORM")) {
+        return;
+    }
+    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;
+        }
+    }
+    const QByteArray sessionType = qgetenv("XDG_SESSION_TYPE");
+    if (sessionType.isEmpty()) {
+        return;
+    }
+    if (qstrcmp(sessionType, "wayland") == 0) {
+        qputenv("QT_QPA_PLATFORM", "wayland");
+    } else if (qstrcmp(sessionType, "x11") == 0) {
+        qputenv("QT_QPA_PLATFORM", "xcb");
+    }
+}
+
 } // end namespace
 
 
diff --git a/libkworkspace/kworkspace.h b/libkworkspace/kworkspace.h
index 6cfc94fe..44025674 100644
--- a/libkworkspace/kworkspace.h
+++ b/libkworkspace/kworkspace.h
@@ -150,6 +150,21 @@ namespace KWorkSpace
    */
    KWORKSPACE_EXPORT void propagateSessionManager();
 
+   /**
+    * Performs platform detection and adjusts QT_QPA_PLATFORM environment
+    * variable to either xcb or wayland depending on the detected platform.
+    *
+    * The detection is based on the XDG_SESSION_TYPE environment variable.
+    * The detection is skipped in case QT_QPA_PLATFORM is already set or
+    * if one of the command line arguments contains the "-platform" variable.
+    *
+    * In order to make use of this function, it has to be invoked before the
+    * QGuiApplication instance is constructed. Invoking after constructing the
+    * QGuiApplication has no effect.
+    * @since 5.13
+    **/
+   KWORKSPACE_EXPORT void detectPlatform(int argc, char **argv);
+
 }
 
 #endif
diff --git a/shell/CMakeLists.txt b/shell/CMakeLists.txt
index 04ad01ae..b5f53f84 100644
--- a/shell/CMakeLists.txt
+++ b/shell/CMakeLists.txt
@@ -93,6 +93,7 @@ target_link_libraries(plasmashell
  KF5::XmlGui
  KF5::Package
  KF5::WaylandClient
+ PW::KWorkspace
 )
 target_include_directories(plasmashell PRIVATE "${CMAKE_BINARY_DIR}")
 target_compile_definitions(plasmashell PRIVATE 
-DPROJECT_VERSION="${PROJECT_VERSION}")
diff --git a/shell/main.cpp b/shell/main.cpp
index 22ef0388..09cca77a 100644
--- a/shell/main.cpp
+++ b/shell/main.cpp
@@ -31,6 +31,7 @@
 #include <kdbusservice.h>
 #include <klocalizedstring.h>
 #include <kcrash.h>
+#include <kworkspace.h>
 
 #include "shellcorona.h"
 #include "standaloneappcorona.h"
@@ -56,6 +57,7 @@ int main(int argc, char *argv[])
 
     QQuickWindow::setDefaultAlphaBuffer(true);
 
+    KWorkSpace::detectPlatform(argc, argv);
     QApplication app(argc, argv);
     KLocalizedString::setApplicationDomain("plasmashell");
 
diff --git a/startkde/kcminit/CMakeLists.txt b/startkde/kcminit/CMakeLists.txt
index 783c1966..00f024e9 100644
--- a/startkde/kcminit/CMakeLists.txt
+++ b/startkde/kcminit/CMakeLists.txt
@@ -14,7 +14,7 @@ qt5_add_dbus_interface(kcminit_KDEINIT_SRCS ${klauncher_xml} 
klauncher_iface)
 
 kf5_add_kdeinit_executable( kcminit ${kcminit_KDEINIT_SRCS})
 
-target_link_libraries(kdeinit_kcminit Qt5::Core Qt5::Gui Qt5::DBus 
KF5::CoreAddons KF5::Service KF5::I18n)
+target_link_libraries(kdeinit_kcminit Qt5::Core Qt5::Gui Qt5::DBus 
KF5::CoreAddons KF5::Service KF5::I18n PW::KWorkspace)
 if (XCB_XCB_FOUND)
     target_link_libraries(kdeinit_kcminit XCB::XCB)
 endif()
@@ -32,7 +32,7 @@ set(kcminit_startup_KDEINIT_SRCS main.cpp)
 qt5_add_dbus_interface(kcminit_startup_KDEINIT_SRCS ${klauncher_xml} 
klauncher_iface)
 kf5_add_kdeinit_executable( kcminit_startup ${kcminit_startup_KDEINIT_SRCS})
 
-target_link_libraries(kdeinit_kcminit_startup Qt5::Core Qt5::Gui Qt5::DBus 
KF5::CoreAddons KF5::Service KF5::I18n)
+target_link_libraries(kdeinit_kcminit_startup Qt5::Core Qt5::Gui Qt5::DBus 
KF5::CoreAddons KF5::Service KF5::I18n PW::KWorkspace)
 if (XCB_XCB_FOUND)
     target_link_libraries(kdeinit_kcminit_startup XCB::XCB)
 endif()
diff --git a/startkde/kcminit/main.cpp b/startkde/kcminit/main.cpp
index 7181281c..6ac26bda 100644
--- a/startkde/kcminit/main.cpp
+++ b/startkde/kcminit/main.cpp
@@ -42,6 +42,7 @@
 #include <kconfiggroup.h>
 #include <klocalizedstring.h>
 #include <kservicetypetrader.h>
+#include <kworkspace.h>
 
 static int ready[ 2 ];
 static bool startup = false;
@@ -221,6 +222,7 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char *argv[])
 
   startup = ( strcmp( argv[ 0 ], "kcminit_startup" ) == 0 ); // started from 
startkde?
 
+  KWorkSpace::detectPlatform(argc, argv);
   QGuiApplication::setDesktopSettingsAware(false);
   QGuiApplication app(argc, argv); //gui is needed for several modules
   KLocalizedString::setApplicationDomain("kcminit");
diff --git a/systemmonitor/CMakeLists.txt b/systemmonitor/CMakeLists.txt
index e952d9ed..f925cb63 100644
--- a/systemmonitor/CMakeLists.txt
+++ b/systemmonitor/CMakeLists.txt
@@ -25,6 +25,7 @@ target_link_libraries(systemmonitor
     KF5::XmlGui
     KF5::GlobalAccel
     KF5::WindowSystem
+    PW::KWorkspace
 )
 
 install(TARGETS systemmonitor DESTINATION ${KDE_INSTALL_BINDIR})
diff --git a/systemmonitor/main.cpp b/systemmonitor/main.cpp
index ccf6cae7..7311580b 100644
--- a/systemmonitor/main.cpp
+++ b/systemmonitor/main.cpp
@@ -21,10 +21,13 @@
 #include <QDBusConnection>
 #include <KLocalizedString>
 
+#include <kworkspace.h>
+
 #include "ksystemactivitydialog.h"
 
 int main(int argc, char** argv)
 {
+    KWorkSpace::detectPlatform(argc, argv);
     QApplication app(argc, argv);
     KLocalizedString::setApplicationDomain("systemmonitor");
 
-- 
2.16.2

++++++ 0003-No-longer-export-QT_QPA_PLATFORM-env-variable-to-the.patch ++++++
>From 9dd3d4711ac74fd9d93344db7e6c2691026f21c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= <[email protected]>
Date: Sun, 18 Mar 2018 11:08:02 +0100
Subject: [PATCH 3/3] No longer export QT_QPA_PLATFORM env variable to the
 session

Summary:
As discussed the env variables are no longer exported. Thus Qt
applications follow the default qpa platform they are compiled with and
thus still function if they are packaged with a Qt without QtWayland.
Plasma's internal processes pick the qpa platform depending on the
session type as well as our flatpak apps.

KRunner and Plasmashell are adjusted to not leak the env variable they
set for themselves.

Test Plan:
Started a wayland session, verified with KWin's debug console
that plasmashell and krunner are wayland. Launched kwrite from both plasma
and krunner and verified that it's xcb

Reviewers: #plasma

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D11447
---
 krunner/main.cpp                     | 5 +++++
 shell/main.cpp                       | 5 +++++
 startkde/startplasmacompositor.cmake | 4 ----
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/krunner/main.cpp b/krunner/main.cpp
index 06bf47c0..329eca7e 100644
--- a/krunner/main.cpp
+++ b/krunner/main.cpp
@@ -44,9 +44,14 @@ int main(int argc, char **argv)
     qunsetenv("QT_DEVICE_PIXEL_RATIO");
     QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
 
+    const bool qpaVariable = qEnvironmentVariableIsSet("QT_QPA_PLATFORM");
     KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
     QApplication app(argc, argv);
+    if (!qpaVariable) {
+        // don't leak the env variable to processes we start
+        qunsetenv("QT_QPA_PLATFORM");
+    }
     KLocalizedString::setApplicationDomain("krunner");
 
     KQuickAddons::QtQuickSettings::init();
diff --git a/shell/main.cpp b/shell/main.cpp
index 09cca77a..037eb8f3 100644
--- a/shell/main.cpp
+++ b/shell/main.cpp
@@ -57,8 +57,13 @@ int main(int argc, char *argv[])
 
     QQuickWindow::setDefaultAlphaBuffer(true);
 
+    const bool qpaVariable = qEnvironmentVariableIsSet("QT_QPA_PLATFORM");
     KWorkSpace::detectPlatform(argc, argv);
     QApplication app(argc, argv);
+    if (!qpaVariable) {
+        // don't leak the env variable to processes we start
+        qunsetenv("QT_QPA_PLATFORM");
+    }
     KLocalizedString::setApplicationDomain("plasmashell");
 
     // The executable's path is added to the library/plugin paths.
diff --git a/startkde/startplasmacompositor.cmake 
b/startkde/startplasmacompositor.cmake
index 8ac47aa7..dd9e304d 100644
--- a/startkde/startplasmacompositor.cmake
+++ b/startkde/startplasmacompositor.cmake
@@ -218,10 +218,6 @@ export KDE_SESSION_UID
 XDG_CURRENT_DESKTOP=KDE
 export XDG_CURRENT_DESKTOP
 
-#enforce wayland QPA
-QT_QPA_PLATFORM=wayland
-export QT_QPA_PLATFORM
-
 # kwin_wayland can possibly also start dbus-activated services which need env 
variables.
 # In that case, the update in startplasma might be too late.
 if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
-- 
2.16.2

++++++ plasma-workspace-5.12.3.tar.xz -> plasma-workspace-5.12.4.tar.xz ++++++
++++ 12332 lines of diff (skipped)


Reply via email to