17static const int s_version = 1;
19static QRegion mapScaleOverride(
const QRegion ®ion, qreal scaleOverride)
22 for (
const QRect &rect : region) {
23 out += QRect(rect.topLeft() / scaleOverride, rect.size() / scaleOverride);
29 : QtWaylandServer::zwp_pointer_constraints_v1(*display, s_version)
33static QRegion regionFromResource(::wl_resource *resource)
36 return region ? region->
region() : QRegion();
41 ::wl_resource *surface_resource,
42 ::wl_resource *pointer_resource,
43 ::wl_resource *region_resource,
48 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid pointer");
54 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid surface");
59 wl_resource_post_error(resource->handle, error_already_constrained,
"the surface is already constrained");
63 if (lifetime != lifetime_oneshot && lifetime != lifetime_persistent) {
64 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"unknown lifetime %d", lifetime);
68 wl_resource *lockedPointerResource = wl_resource_create(resource->client(), &zwp_locked_pointer_v1_interface, resource->version(),
id);
69 if (!lockedPointerResource) {
70 wl_resource_post_no_memory(resource->handle);
79 ::wl_resource *surface_resource,
80 ::wl_resource *pointer_resource,
81 ::wl_resource *region_resource,
86 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid pointer");
92 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"invalid surface");
96 if (lifetime != lifetime_oneshot && lifetime != lifetime_persistent) {
97 wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT,
"unknown lifetime %d", lifetime);
102 wl_resource_post_error(resource->handle, error_already_constrained,
"the surface is already constrained");
106 wl_resource *confinedPointerResource = wl_resource_create(resource->client(), &zwp_confined_pointer_v1_interface, resource->version(),
id);
107 if (!confinedPointerResource) {
108 wl_resource_post_no_memory(resource->handle);
117 wl_resource_destroy(resource->handle);
138 const QRegion ®ion,
139 ::wl_resource *resource)
140 : QtWaylandServer::zwp_locked_pointer_v1(resource)
156 const QPointF oldHint =
hint;
158 if (commit->
region.has_value()) {
161 if (commit->
hint.has_value()) {
173 if (oldHint !=
hint) {
186 wl_resource_destroy(resource->handle);
191 pending.
hint = QPointF(wl_fixed_to_double(surface_x), wl_fixed_to_double(surface_y));
199LockedPointerV1Interface::LockedPointerV1Interface(
SurfaceInterface *surface,
201 const QRegion ®ion,
202 ::wl_resource *resource)
219 return d->effectiveRegion;
234 if (d->isLocked == locked) {
238 d->hint = QPointF(-1, -1);
240 d->isLocked = locked;
257 const QRegion ®ion,
258 ::wl_resource *resource)
259 : QtWaylandServer::zwp_confined_pointer_v1(resource)
276 if (commit->
region.has_value()) {
297 wl_resource_destroy(resource->handle);
305ConfinedPointerV1Interface::ConfinedPointerV1Interface(
SurfaceInterface *surface,
307 const QRegion ®ion,
308 ::wl_resource *resource)
325 return d->effectiveRegion;
330 return d->isConfined;
335 if (d->isConfined == confined) {
338 d->isConfined = confined;
342 d->send_unconfined();
349#include "moc_pointerconstraints_v1.cpp"
~ConfinedPointerV1Interface() override
LifeTime lifeTime() const
void setConfined(bool confined)
static ConfinedPointerV1InterfacePrivate * get(ConfinedPointerV1Interface *pointer)
void zwp_confined_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override
void zwp_confined_pointer_v1_destroy(Resource *resource) override
void apply(ConfinedPointerV1Commit *commit) override
ConfinedPointerV1Interface * q
ConfinedPointerV1InterfacePrivate(ConfinedPointerV1Interface *q, SurfaceInterface *surface, ConfinedPointerV1Interface::LifeTime lifeTime, const QRegion ®ion, ::wl_resource *resource)
QPointer< SurfaceInterface > surface
void zwp_confined_pointer_v1_destroy_resource(Resource *resource) override
Class holding the Wayland server display loop.
void cursorPositionHintChanged()
~LockedPointerV1Interface() override
LifeTime lifeTime() const
QPointF cursorPositionHint() const
void aboutToBeDestroyed()
void setLocked(bool locked)
LockedPointerV1Interface * q
void zwp_locked_pointer_v1_destroy(Resource *resource) override
QPointer< SurfaceInterface > surface
void zwp_locked_pointer_v1_set_region(Resource *resource, struct ::wl_resource *region_resource) override
void zwp_locked_pointer_v1_destroy_resource(Resource *resource) override
LockedPointerV1InterfacePrivate(LockedPointerV1Interface *q, SurfaceInterface *surface, LockedPointerV1Interface::LifeTime lifeTime, const QRegion ®ion, ::wl_resource *resource)
void apply(LockedPointerV1Commit *commit) override
void zwp_locked_pointer_v1_set_cursor_position_hint(Resource *resource, wl_fixed_t surface_x, wl_fixed_t surface_y) override
static LockedPointerV1InterfacePrivate * get(LockedPointerV1Interface *pointer)
PointerConstraintsV1Interface(Display *display, QObject *parent=nullptr)
~PointerConstraintsV1Interface() override
void zwp_pointer_constraints_v1_lock_pointer(Resource *resource, uint32_t id, struct ::wl_resource *surface_resource, struct ::wl_resource *pointer_resource, struct ::wl_resource *region_resource, uint32_t lifetime) override
PointerConstraintsV1InterfacePrivate(Display *display)
void zwp_pointer_constraints_v1_destroy(Resource *resource) override
void zwp_pointer_constraints_v1_confine_pointer(Resource *resource, uint32_t id, struct ::wl_resource *surface_resource, struct ::wl_resource *pointer_resource, struct ::wl_resource *region_resource, uint32_t lifetime) override
static PointerInterface * get(wl_resource *native)
static RegionInterface * get(wl_resource *native)
LockedPointerV1Commit pending
Resource representing a wl_surface.
static SurfaceInterface * get(wl_resource *native)
ConfinedPointerV1Interface * confinedPointer() const
LockedPointerV1Interface * lockedPointer() const
static SurfaceInterfacePrivate * get(SurfaceInterface *surface)
void installPointerConstraint(LockedPointerV1Interface *lock)
std::optional< QRegion > region
std::optional< QPointF > hint
std::optional< QRegion > region