diff --git a/src/interfaces/window.cpp b/src/interfaces/window.cpp index 0632c7a..477b74e 100644 --- a/src/interfaces/window.cpp +++ b/src/interfaces/window.cpp @@ -5,10 +5,9 @@ */ #include "window.h" -#include "../qwaylandlayersurface_p.h" #include -#include -#include + +#include using namespace LayerShellQt; @@ -27,7 +26,6 @@ public: Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityExclusive; Window::Layer layer = Window::LayerTop; QMargins margins; - QWaylandLayerSurface *getSurface() const; QPointer desiredOutput; }; @@ -41,9 +39,7 @@ Window::~Window() void Window::setAnchors(Anchors anchors) { d->anchors = anchors; - if (auto surface = d->getSurface()) { - surface->setAnchor(anchors); - } + Q_EMIT anchorsChanged(); } Window::Anchors Window::anchors() const @@ -54,9 +50,7 @@ Window::Anchors Window::anchors() const void Window::setExclusiveZone(int32_t zone) { d->exclusionZone = zone; - if (auto surface = d->getSurface()) { - surface->setExclusiveZone(zone); - } + Q_EMIT exclusionZoneChanged(); } int32_t Window::exclusionZone() const @@ -67,9 +61,7 @@ int32_t Window::exclusionZone() const void Window::setMargins(const QMargins &margins) { d->margins = margins; - if (auto surface = d->getSurface()) { - surface->setMargins(margins); - } + Q_EMIT marginsChanged(); } QMargins Window::margins() const @@ -80,9 +72,7 @@ QMargins Window::margins() const void Window::setKeyboardInteractivity(KeyboardInteractivity interactivity) { d->keyboardInteractivity = interactivity; - if (auto surface = d->getSurface()) { - surface->setKeyboardInteractivity(interactivity); - } + Q_EMIT keyboardInteractivityChanged(); } Window::KeyboardInteractivity Window::keyboardInteractivity() const @@ -93,9 +83,6 @@ Window::KeyboardInteractivity Window::keyboardInteractivity() const void Window::setLayer(Layer layer) { d->layer = layer; - if (auto surface = d->getSurface()) { - surface->setLayer(layer); - } } void Window::setScope(const QString &scope) @@ -139,21 +126,3 @@ Window *Window::get(QWindow *window) } return new Window(window); } - -QWaylandLayerSurface *WindowPrivate::getSurface() const -{ - if (!parentWindow) { - return nullptr; - } - auto ww = dynamic_cast(parentWindow->handle()); - if (!ww) { - qCDebug(LAYERSHELLQT) << "window not a wayland window" << parentWindow; - return nullptr; - } - QWaylandLayerSurface *s = qobject_cast(ww->shellSurface()); - if (!s) { - qCDebug(LAYERSHELLQT) << "window not using wlr-layer-shell" << parentWindow << ww->shellSurface(); - return nullptr; - } - return s; -} diff --git a/src/interfaces/window.h b/src/interfaces/window.h index 723cf7a..5ebc9b1 100644 --- a/src/interfaces/window.h +++ b/src/interfaces/window.h @@ -93,6 +93,13 @@ public: */ static Window *get(QWindow *window); +Q_SIGNALS: + void anchorsChanged(); + void exclusionZoneChanged(); + void marginsChanged(); + void keyboardInteractivityChanged(); + void layerChanged(); + private: Window(QWindow *window); QScopedPointer d; diff --git a/src/qwaylandlayersurface.cpp b/src/qwaylandlayersurface.cpp index 1e6af6d..dd17aa0 100644 --- a/src/qwaylandlayersurface.cpp +++ b/src/qwaylandlayersurface.cpp @@ -36,15 +36,31 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShell *shell, QtWaylandC } } init(shell->get_layer_surface(window->waylandSurface()->object(), output, interface->layer(), interface->scope())); - - Window::Anchors anchors = interface->anchors(); + connect(interface, &Window::layerChanged, this, [this, interface]() { + setLayer(interface->layer()); + }); set_anchor(interface->anchors()); - setMargins(interface->margins()); - setKeyboardInteractivity(interface->keyboardInteractivity()); + connect(interface, &Window::anchorsChanged, this, [this, interface]() { + set_anchor(interface->anchors()); + }); setExclusiveZone(interface->exclusionZone()); + connect(interface, &Window::exclusionZoneChanged, this, [this, interface]() { + setExclusiveZone(interface->exclusionZone()); + }); + + setMargins(interface->margins()); + connect(interface, &Window::marginsChanged, this, [this, interface]() { + setMargins(interface->margins()); + }); + + setKeyboardInteractivity(interface->keyboardInteractivity()); + connect(interface, &Window::keyboardInteractivityChanged, this, [this, interface]() { + setKeyboardInteractivity(interface->keyboardInteractivity()); + }); QSize size = window->surfaceSize(); + const Window::Anchors anchors = interface->anchors(); if ((anchors & Window::AnchorLeft) && (anchors & Window::AnchorRight)) { size.setWidth(0); }