From 60b7d27ae0890e3cf60f6237fdb7c1ac5e8ac5f3 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 20 Jan 2026 14:19:07 +0200 Subject: [PATCH] Add Window::screenConfiguration() shim This shim is for 6.6 to maintain compatibility with previous versions. (cherry picked from commit dd76feea81e851d7032c3b7160ef30f0bc77786e) --- src/interfaces/window.cpp | 28 ++++++++++++++++++++++++++++ src/interfaces/window.h | 22 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/interfaces/window.cpp b/src/interfaces/window.cpp index 7ea290d..a9718c8 100644 --- a/src/interfaces/window.cpp +++ b/src/interfaces/window.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -153,6 +154,33 @@ Window::Layer Window::layer() const return d->layer; } +#if LAYERSHELLQTINTERFACE_BUILD_DEPRECATED_SINCE(6, 6) +Window::ScreenConfiguration Window::screenConfiguration() const +{ + if (wantsToBeOnActiveScreen()) { + return ScreenFromCompositor; + } else { + // If an explicit screen is set, it's quite inaccurate but it should be fine. + return ScreenFromQWindow; + } +} + +void Window::setScreenConfiguration(ScreenConfiguration screenConfiguration) +{ + static std::once_flag deprecationFlag; + std::call_once(deprecationFlag, []() { + qWarning() << "LayerShellQt.Window.screenConfiguration is deprecated use screen and wantsToBeOnActiveScreen instead"; + }); + + if (screenConfiguration == ScreenFromCompositor) { + setWantsToBeOnActiveScreen(true); + } else { + setWantsToBeOnActiveScreen(false); + setScreen(nullptr); + } +} +#endif + void Window::setWantsToBeOnActiveScreen(bool set) { if (d->wantsToBeOnActiveScreen == set) { diff --git a/src/interfaces/window.h b/src/interfaces/window.h index 2c2e1c8..25b98e5 100644 --- a/src/interfaces/window.h +++ b/src/interfaces/window.h @@ -30,6 +30,9 @@ class LAYERSHELLQT_EXPORT Window : public QObject Q_PROPERTY(bool activateOnShow READ activateOnShow WRITE setActivateOnShow) Q_PROPERTY(bool wantsToBeOnActiveScreen READ wantsToBeOnActiveScreen WRITE setWantsToBeOnActiveScreen NOTIFY wantsToBeOnActiveScreenChanged) Q_PROPERTY(QScreen *screen READ screen WRITE setScreen NOTIFY screenChanged) +#if LAYERSHELLQTINTERFACE_ENABLE_DEPRECATED_SINCE(6, 6) + Q_PROPERTY(ScreenConfiguration screenConfiguration READ screenConfiguration WRITE setScreenConfiguration) +#endif public: ~Window() override; @@ -86,6 +89,25 @@ public: void setLayer(Layer layer); Layer layer() const; +#if LAYERSHELLQTINTERFACE_ENABLE_DEPRECATED_SINCE(6, 6) + /** + * This enum type is used to specify which screen to place the surface on. + * ScreenFromQWindow (the default) reads QWindow::screen() while ScreenFromCompositor + * passes nil and lets the compositor decide. + */ + LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead") + enum ScreenConfiguration { + ScreenFromQWindow = 0, + ScreenFromCompositor = 1, + }; + Q_ENUM(ScreenConfiguration) + + LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead") + void setScreenConfiguration(ScreenConfiguration screenConfiguration); + LAYERSHELLQTINTERFACE_DEPRECATED_VERSION(6, 6, "Use wantsToBeOnActiveScreen and screen instead") + ScreenConfiguration screenConfiguration() const; +#endif + /** * Indicates whether the layer shell surface should be placed on the active screen based on @a set. *