mirror of
https://invent.kde.org/plasma/layer-shell-qt.git
synced 2025-07-14 19:14:23 -04:00
QWaylandLayerSurface pulled data from the Window on startup. The Window pushed data into the QWaylandLayerSurface on changes. Having two patterns is a sign of something being off. This moves everything to a single design, pulling from the public interface. This allows us to drop a code path that meddles with QWaylandWindow internals.
129 lines
2.4 KiB
C++
129 lines
2.4 KiB
C++
/*
|
|
* SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-3.0-or-later
|
|
*/
|
|
|
|
#include "window.h"
|
|
#include <layershellqt_logging.h>
|
|
|
|
#include <QPointer>
|
|
|
|
using namespace LayerShellQt;
|
|
|
|
class LayerShellQt::WindowPrivate
|
|
{
|
|
public:
|
|
WindowPrivate(QWindow *window)
|
|
: parentWindow(window)
|
|
{
|
|
}
|
|
|
|
QWindow *parentWindow;
|
|
QString scope = QStringLiteral("window");
|
|
Window::Anchors anchors = {Window::AnchorTop | Window::AnchorBottom | Window::AnchorLeft | Window::AnchorRight};
|
|
int32_t exclusionZone = 0;
|
|
Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityExclusive;
|
|
Window::Layer layer = Window::LayerTop;
|
|
QMargins margins;
|
|
QPointer<QScreen> desiredOutput;
|
|
};
|
|
|
|
static QMap<QWindow *, Window *> s_map;
|
|
|
|
Window::~Window()
|
|
{
|
|
s_map.remove(d->parentWindow);
|
|
}
|
|
|
|
void Window::setAnchors(Anchors anchors)
|
|
{
|
|
d->anchors = anchors;
|
|
Q_EMIT anchorsChanged();
|
|
}
|
|
|
|
Window::Anchors Window::anchors() const
|
|
{
|
|
return d->anchors;
|
|
}
|
|
|
|
void Window::setExclusiveZone(int32_t zone)
|
|
{
|
|
d->exclusionZone = zone;
|
|
Q_EMIT exclusionZoneChanged();
|
|
}
|
|
|
|
int32_t Window::exclusionZone() const
|
|
{
|
|
return d->exclusionZone;
|
|
}
|
|
|
|
void Window::setMargins(const QMargins &margins)
|
|
{
|
|
d->margins = margins;
|
|
Q_EMIT marginsChanged();
|
|
}
|
|
|
|
QMargins Window::margins() const
|
|
{
|
|
return d->margins;
|
|
}
|
|
|
|
void Window::setKeyboardInteractivity(KeyboardInteractivity interactivity)
|
|
{
|
|
d->keyboardInteractivity = interactivity;
|
|
Q_EMIT keyboardInteractivityChanged();
|
|
}
|
|
|
|
Window::KeyboardInteractivity Window::keyboardInteractivity() const
|
|
{
|
|
return d->keyboardInteractivity;
|
|
}
|
|
|
|
void Window::setLayer(Layer layer)
|
|
{
|
|
d->layer = layer;
|
|
}
|
|
|
|
void Window::setScope(const QString &scope)
|
|
{
|
|
d->scope = scope;
|
|
// this is static and must be set before the platform window is created
|
|
}
|
|
|
|
QString Window::scope() const
|
|
{
|
|
return d->scope;
|
|
}
|
|
|
|
Window::Layer Window::layer() const
|
|
{
|
|
return d->layer;
|
|
}
|
|
|
|
QScreen *Window::desiredOutput() const
|
|
{
|
|
return d->desiredOutput;
|
|
}
|
|
|
|
void Window::setDesiredOutput(QScreen *output)
|
|
{
|
|
d->desiredOutput = output;
|
|
}
|
|
|
|
Window::Window(QWindow *window)
|
|
: QObject(window)
|
|
, d(new WindowPrivate(window))
|
|
{
|
|
s_map.insert(d->parentWindow, this);
|
|
}
|
|
|
|
Window *Window::get(QWindow *window)
|
|
{
|
|
auto layerShellWindow = s_map.value(window);
|
|
if (layerShellWindow) {
|
|
return layerShellWindow;
|
|
}
|
|
return new Window(window);
|
|
}
|