Blob Blame History Raw
From 1be046edd455969b74417ded6871d25eba8a1112 Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Mon, 27 Jun 2022 17:12:09 +0200
Subject: [PATCH] Disable toplevel fixed positions on Wayland

Given that the wayland protocol does not have window positions a recent
change to Qt development branch avoids having a mismatch of positions
and tells client code the window is at the topleft of the screen. This
fixes multiple bugs.

Unfortuantely this breaks a few usages within plasma where a
side-channel sends that absolute positional information over a bespoke
protocol. Currently we proxy this all through QWindow geometry where the
new Qt behaviour will throw is askew.

Whilst our longterm plans are to find future options away from the
plasmashell protocol we may as well have our Qt6
build work given the patch is trivial and harmless.

It also allows for potential backporting if our software is
already secured against issues.
---
 krunner/main.cpp | 2 ++
 shell/main.cpp   | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/krunner/main.cpp b/krunner/main.cpp
index a05402a01..f19382cad 100644
--- a/krunner/main.cpp
+++ b/krunner/main.cpp
@@ -34,6 +34,7 @@ int main(int argc, char **argv)
         QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
     }

+    qputenv("QT_WAYLAND_DISABLE_FIXED_POSITIONS", {});
     const bool qpaVariable = qEnvironmentVariableIsSet("QT_QPA_PLATFORM");
     KWorkSpace::detectPlatform(argc, argv);
     QQuickWindow::setDefaultAlphaBuffer(true);
@@ -42,6 +43,7 @@ int main(int argc, char **argv)
         // don't leak the env variable to processes we start
         qunsetenv("QT_QPA_PLATFORM");
     }
+    qunsetenv("QT_WAYLAND_DISABLE_FIXED_POSITIONS");
     KLocalizedString::setApplicationDomain("krunner");

     //     TODO: Make it a QGuiApplication once we don't depend on KDELibs4Support
diff --git a/shell/main.cpp b/shell/main.cpp
index 26e4ecede..147483df4 100644
--- a/shell/main.cpp
+++ b/shell/main.cpp
@@ -79,6 +79,7 @@ int main(int argc, char *argv[])

     oldCategoryFilter = QLoggingCategory::installFilter(filterConnectionSyntaxWarning);

+    qputenv("QT_WAYLAND_DISABLE_FIXED_POSITIONS", {});
     const bool qpaVariable = qEnvironmentVariableIsSet("QT_QPA_PLATFORM");
     KWorkSpace::detectPlatform(argc, argv);
     QApplication app(argc, argv);
@@ -86,6 +87,8 @@ int main(int argc, char *argv[])
         // don't leak the env variable to processes we start
         qunsetenv("QT_QPA_PLATFORM");
     }
+    qunsetenv("QT_WAYLAND_DISABLE_FIXED_POSITIONS");
+
     KLocalizedString::setApplicationDomain("plasmashell");

     // The executable's path is added to the library/plugin paths.
--
GitLab