You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
2 years ago
|
From 3c85e2e8899d1253430783a618d7584d985bd614 Mon Sep 17 00:00:00 2001
|
||
|
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||
|
Date: Tue, 21 Feb 2023 16:03:51 +0100
|
||
|
Subject: [PATCH] Use the QScreen of the QWindow as default output
|
||
|
|
||
|
If the Window::setDesiredOutput API was not called for the QWindow, use
|
||
|
QWindow::screen(). This allows assigning QWindows to specific screens using
|
||
|
the plain Qt API.
|
||
|
|
||
|
Passing nullptr to Window::setDesiredOutput explicitly results in nil as
|
||
|
desired output for the layer, which lets the compositor select a screen.
|
||
|
---
|
||
|
src/interfaces/window.cpp | 10 ++++++++--
|
||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/interfaces/window.cpp b/src/interfaces/window.cpp
|
||
|
index 477b74e..7aa39f4 100644
|
||
|
--- a/src/interfaces/window.cpp
|
||
|
+++ b/src/interfaces/window.cpp
|
||
|
@@ -8,6 +8,7 @@
|
||
|
#include <layershellqt_logging.h>
|
||
|
|
||
|
#include <QPointer>
|
||
|
+#include <optional>
|
||
|
|
||
|
using namespace LayerShellQt;
|
||
|
|
||
|
@@ -26,7 +27,7 @@ public:
|
||
|
Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityExclusive;
|
||
|
Window::Layer layer = Window::LayerTop;
|
||
|
QMargins margins;
|
||
|
- QPointer<QScreen> desiredOutput;
|
||
|
+ std::optional<QPointer<QScreen>> desiredOutput;
|
||
|
};
|
||
|
|
||
|
static QMap<QWindow *, Window *> s_map;
|
||
|
@@ -103,7 +104,12 @@ Window::Layer Window::layer() const
|
||
|
|
||
|
QScreen *Window::desiredOutput() const
|
||
|
{
|
||
|
- return d->desiredOutput;
|
||
|
+ // Don't use .value_or here to avoid a temporary QPointer
|
||
|
+ if (d->desiredOutput.has_value()) {
|
||
|
+ return d->desiredOutput.value();
|
||
|
+ }
|
||
|
+
|
||
|
+ return d->parentWindow->screen();
|
||
|
}
|
||
|
|
||
|
void Window::setDesiredOutput(QScreen *output)
|
||
|
--
|
||
|
GitLab
|
||
|
|