From d33befa74007dc3d3809618eadcc699ecbae30b3 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 18 Jan 2024 17:19:25 +0100 Subject: [PATCH] Add a new setExclusiveEdge call in the protocol This can be used to disambiguate the exclusive edge when the anchors are on a corner (so there would be 2 candidates) --- src/interfaces/window.cpp | 21 +++------------------ src/interfaces/window.h | 9 +++------ src/qwaylandlayersurface.cpp | 15 ++------------- src/qwaylandlayersurface_p.h | 3 +-- src/wlr-layer-shell-unstable-v1.xml | 17 ++--------------- 5 files changed, 11 insertions(+), 54 deletions(-) diff --git a/src/interfaces/window.cpp b/src/interfaces/window.cpp index e387cb4..f7146a5 100644 --- a/src/interfaces/window.cpp +++ b/src/interfaces/window.cpp @@ -27,7 +27,7 @@ public: QWindow *parentWindow; QString scope = QStringLiteral("window"); Window::Anchors anchors = {Window::AnchorTop | Window::AnchorBottom | Window::AnchorLeft | Window::AnchorRight}; - int32_t exclusionZone = 0; + QSize exclusionZone; Window::Anchor exclusiveEdge = Window::AnchorNone; Window::KeyboardInteractivity keyboardInteractivity = Window::KeyboardInteractivityOnDemand; Window::Layer layer = Window::LayerTop; @@ -56,7 +56,7 @@ Window::Anchors Window::anchors() const return d->anchors; } -void Window::setExclusiveZone(int32_t zone) +void Window::setExclusiveZone(const QSize &zone) { if (d->exclusionZone != zone) { d->exclusionZone = zone; @@ -64,26 +64,11 @@ void Window::setExclusiveZone(int32_t zone) } } -int32_t Window::exclusionZone() const +QSize Window::exclusionZone() const { return d->exclusionZone; } -void Window::setExclusiveEdge(Window::Anchor edge) -{ - if (d->exclusiveEdge == edge) { - return; - } - - d->exclusiveEdge = edge; - Q_EMIT exclusiveEdgeChanged(); -} - -Window::Anchor Window::exclusiveEdge() const -{ - return d->exclusiveEdge; -} - void Window::setMargins(const QMargins &margins) { if (d->margins != margins) { diff --git a/src/interfaces/window.h b/src/interfaces/window.h index 9b476a4..a26ca5d 100644 --- a/src/interfaces/window.h +++ b/src/interfaces/window.h @@ -24,7 +24,7 @@ class LAYERSHELLQT_EXPORT Window : public QObject Q_PROPERTY(Anchors anchors READ anchors WRITE setAnchors NOTIFY anchorsChanged) Q_PROPERTY(QString scope READ scope WRITE setScope) Q_PROPERTY(QMargins margins READ margins WRITE setMargins NOTIFY marginsChanged) - Q_PROPERTY(qint32 exclusionZone READ exclusionZone WRITE setExclusiveZone NOTIFY exclusionZoneChanged) + Q_PROPERTY(QSize exclusionZone READ exclusionZone WRITE setExclusiveZone NOTIFY exclusionZoneChanged) Q_PROPERTY(Layer layer READ layer WRITE setLayer NOTIFY layerChanged) Q_PROPERTY(KeyboardInteractivity keyboardInteractivity READ keyboardInteractivity WRITE setKeyboardInteractivity NOTIFY keyboardInteractivityChanged) Q_PROPERTY(ScreenConfiguration screenConfiguration READ screenConfiguration WRITE setScreenConfiguration) @@ -77,11 +77,8 @@ public: void setAnchors(Anchors anchor); Anchors anchors() const; - void setExclusiveZone(int32_t zone); - int32_t exclusionZone() const; - - void setExclusiveEdge(Window::Anchor edge); - Window::Anchor exclusiveEdge() const; + void setExclusiveZone(const QSize &zone); + QSize exclusionZone() const; void setMargins(const QMargins &margins); QMargins margins() const; diff --git a/src/qwaylandlayersurface.cpp b/src/qwaylandlayersurface.cpp index 15ffc1d..dbd00f8 100644 --- a/src/qwaylandlayersurface.cpp +++ b/src/qwaylandlayersurface.cpp @@ -48,10 +48,6 @@ QWaylandLayerSurface::QWaylandLayerSurface(QWaylandLayerShellIntegration *shell, connect(m_interface, &Window::exclusionZoneChanged, this, [this]() { setExclusiveZone(m_interface->exclusionZone()); }); - setExclusiveEdge(m_interface->exclusiveEdge()); - connect(m_interface, &Window::exclusiveEdgeChanged, this, [this]() { - setExclusiveEdge(m_interface->exclusiveEdge()); - }); setMargins(m_interface->margins()); connect(m_interface, &Window::marginsChanged, this, [this]() { @@ -126,16 +122,9 @@ void QWaylandLayerSurface::setAnchor(uint anchor) setWindowGeometry(window()->windowContentGeometry()); } -void QWaylandLayerSurface::setExclusiveZone(int32_t zone) +void QWaylandLayerSurface::setExclusiveZone(const QSize &zone) { - set_exclusive_zone(zone); -} - -void QWaylandLayerSurface::setExclusiveEdge(uint32_t edge) -{ - if (zwlr_layer_surface_v1_get_version(object()) >= ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_EDGE_SINCE_VERSION) { - set_exclusive_edge(edge); - } + set_exclusive_zone(zone.width(), zone.height()); } void QWaylandLayerSurface::setMargins(const QMargins &margins) diff --git a/src/qwaylandlayersurface_p.h b/src/qwaylandlayersurface_p.h index c61e514..ca00565 100644 --- a/src/qwaylandlayersurface_p.h +++ b/src/qwaylandlayersurface_p.h @@ -35,8 +35,7 @@ public: void attachPopup(QtWaylandClient::QWaylandShellSurface *popup) override; void setAnchor(uint32_t anchor); - void setExclusiveZone(int32_t zone); - void setExclusiveEdge(uint32_t edge); + void setExclusiveZone(const QSize &zone); void setMargins(const QMargins &margins); void setKeyboardInteractivity(uint32_t interactivity); void setLayer(uint32_t layer); diff --git a/src/wlr-layer-shell-unstable-v1.xml b/src/wlr-layer-shell-unstable-v1.xml index 75cfb15..652c754 100644 --- a/src/wlr-layer-shell-unstable-v1.xml +++ b/src/wlr-layer-shell-unstable-v1.xml @@ -184,7 +184,8 @@ Exclusive zone is double-buffered, see wl_surface.commit. - + + @@ -387,19 +388,5 @@ - - - - - Requests an edge for the exclusive zone to apply. - The edge must be one the surface is anchored to, otherwise a protocol - error will be raised. - The exclusive edge will be automatically deduced from anchor points - when possible, but when when the surface is anchored to a corner, - it will be necessary to set it explicitly to disambiguate, as is not - possible to deduce which one of the two corner edges should be used. - - -