From 1be046edd455969b74417ded6871d25eba8a1112 Mon Sep 17 00:00:00 2001 From: David Edmundson 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