From 22ba7f67442009870d526c6d8af00dedbd9fa692 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Fri, 24 Feb 2023 10:20:14 +0100 Subject: [PATCH] src/cursor.c: add cursor lock confinement --- src/cursor.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cursor.c b/src/cursor.c index 59563684..1f05ad0f 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -595,6 +595,7 @@ apply_constraint(struct seat *seat, struct wlr_pointer *pointer, double *x, doub if (!seat->current_constraint || pointer->base.type != WLR_INPUT_DEVICE_POINTER) { return; } + assert(seat->current_constraint->type == WLR_POINTER_CONSTRAINT_V1_CONFINED); double sx = seat->cursor->x; double sy = seat->cursor->y; @@ -612,10 +613,21 @@ apply_constraint(struct seat *seat, struct wlr_pointer *pointer, double *x, doub *y = sy_confined - sy; } +static bool +cursor_locked(struct seat *seat, struct wlr_pointer *pointer) +{ + return seat->current_constraint + && pointer->base.type == WLR_INPUT_DEVICE_POINTER + && seat->current_constraint->type == WLR_POINTER_CONSTRAINT_V1_LOCKED; +} + static void preprocess_cursor_motion(struct seat *seat, struct wlr_pointer *pointer, uint32_t time_msec, double dx, double dy) { + if (cursor_locked(seat, pointer)) { + return; + } apply_constraint(seat, pointer, &dx, &dy); /*