aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIkalco <[email protected]>2024-07-23 13:03:15 -0500
committerGitHub <[email protected]>2024-07-23 20:03:15 +0200
commita5f58a31268da95e36c0918ac75589c05e81b892 (patch)
tree48b655269d5a487ee51dd8d5df1724a4577609b9
parent077494ee85c8fa4c6ae74ad8d749feea826294d2 (diff)
downloadHyprland-a5f58a31268da95e36c0918ac75589c05e81b892.tar.gz
Hyprland-a5f58a31268da95e36c0918ac75589c05e81b892.zip
layer-shell: validate exclusiveEdge and don't set it as top by default (#7006)
* validate exclusiveEdge and don't set it as top by default * make sure exclusive edge anchor is within bounds
-rw-r--r--src/protocols/LayerShell.cpp12
-rw-r--r--src/protocols/LayerShell.hpp2
2 files changed, 11 insertions, 3 deletions
diff --git a/src/protocols/LayerShell.cpp b/src/protocols/LayerShell.cpp
index 029f261d..4e733b35 100644
--- a/src/protocols/LayerShell.cpp
+++ b/src/protocols/LayerShell.cpp
@@ -11,7 +11,7 @@ void CLayerShellResource::SState::reset() {
exclusive = 0;
interactivity = ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE;
layer = ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM;
- exclusiveEdge = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP;
+ exclusiveEdge = (zwlrLayerSurfaceV1Anchor)0;
desiredSize = {};
margin = {0, 0, 0, 0};
}
@@ -152,7 +152,15 @@ CLayerShellResource::CLayerShellResource(SP<CZwlrLayerSurfaceV1> resource_, SP<C
});
resource->setSetExclusiveEdge([this](CZwlrLayerSurfaceV1* r, zwlrLayerSurfaceV1Anchor anchor) {
- // TODO: validate anchor
+ if (anchor > (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT)) {
+ r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE, "Invalid exclusive edge");
+ return;
+ }
+
+ if (!pending.anchor || !(pending.anchor & anchor)) {
+ r->error(ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE, "Exclusive edge doesn't align with anchor");
+ return;
+ }
pending.committed |= STATE_EDGE;
pending.exclusiveEdge = anchor;
diff --git a/src/protocols/LayerShell.hpp b/src/protocols/LayerShell.hpp
index 6d29248a..221d95c0 100644
--- a/src/protocols/LayerShell.hpp
+++ b/src/protocols/LayerShell.hpp
@@ -47,7 +47,7 @@ class CLayerShellResource : public ISurfaceRole {
Vector2D desiredSize;
zwlrLayerSurfaceV1KeyboardInteractivity interactivity = ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE;
zwlrLayerShellV1Layer layer = ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM;
- zwlrLayerSurfaceV1Anchor exclusiveEdge = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP;
+ zwlrLayerSurfaceV1Anchor exclusiveEdge = (zwlrLayerSurfaceV1Anchor)0;
uint32_t committed = 0;
struct {