summaryrefslogtreecommitdiff
path: root/src/protocols/Viewporter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocols/Viewporter.cpp')
-rw-r--r--src/protocols/Viewporter.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/protocols/Viewporter.cpp b/src/protocols/Viewporter.cpp
index 8cb69dbe..03c5775e 100644
--- a/src/protocols/Viewporter.cpp
+++ b/src/protocols/Viewporter.cpp
@@ -52,6 +52,21 @@ CViewportResource::CViewportResource(SP<CWpViewport> resource_, SP<CWLSurfaceRes
surface->pending.viewport.hasSource = true;
surface->pending.viewport.source = {x, y, w, h};
});
+
+ listeners.surfacePrecommit = surface->events.precommit.registerListener([this](std::any d) {
+ if (!surface || !surface->pending.buffer)
+ return;
+
+ if (surface->pending.viewport.hasSource) {
+ auto& src = surface->pending.viewport.source;
+
+ if (src.w + src.x > surface->pending.buffer->size.x || src.h + src.y > surface->pending.buffer->size.y) {
+ resource->error(WP_VIEWPORT_ERROR_BAD_VALUE, "Box doesn't fit");
+ surface->pending.rejected = true;
+ return;
+ }
+ }
+ });
}
CViewportResource::~CViewportResource() {
@@ -66,20 +81,6 @@ bool CViewportResource::good() {
return resource->resource();
}
-void CViewportResource::verify() {
- if (!surface)
- return;
-
- if (surface->pending.viewport.hasSource) {
- auto& src = surface->pending.viewport.source;
-
- if (src.w + src.x > surface->pending.size.x || src.h + src.y > surface->pending.size.y) {
- resource->error(WP_VIEWPORT_ERROR_BAD_VALUE, "Box doesn't fit");
- return;
- }
- }
-}
-
CViewporterResource::CViewporterResource(SP<CWpViewporter> resource_) : resource(resource_) {
if (!good())
return;