From 067324c1f4b32b325c0cbf263e9f97a6cbd0b82b Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Thu, 25 Jan 2024 19:46:58 +0100 Subject: [PATCH] Fixed tracker value being updated even if percent isn't Fixes long swipes still updating the tracker value even if the percent wasn't changed --- include/sway/output.h | 4 ++-- sway/desktop/output.c | 26 ++++++++++++++++++++++++-- sway/input/seatop_default.c | 15 +-------------- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/include/sway/output.h b/include/sway/output.h index aa73c70c5..33c6739a8 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -223,8 +223,8 @@ bool workspace_scroll_equal(struct workspace_scroll *a, struct workspace_scroll void workspace_scroll_begin(struct sway_seat *seat, enum swipe_gesture_direction direction); -void workspace_scroll_update(struct sway_seat *seat, double delta_sum, - enum swipe_gesture_direction direction); +void workspace_scroll_update(struct sway_seat *seat, struct gesture_tracker *tracker, + struct wlr_pointer_swipe_update_event *event, int invert); void workspace_scroll_end(struct sway_seat *seat); diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 3247a0e6b..239acaeb4 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -1149,12 +1149,27 @@ void workspace_scroll_begin(struct sway_seat *seat, seat_set_focus_workspace(seat, NULL); } -void workspace_scroll_update(struct sway_seat *seat, double delta_sum, - enum swipe_gesture_direction direction) { +void workspace_scroll_update(struct sway_seat *seat, struct gesture_tracker *tracker, + struct wlr_pointer_swipe_update_event *event, int invert) { struct sway_workspace *focused_ws = seat_get_focused_workspace(seat); struct sway_output *output = focused_ws->output; struct workspace_scroll *ws_scroll = &output->workspace_scroll; + double delta_sum; + enum swipe_gesture_direction direction; + switch (tracker->type) { + case GESTURE_TYPE_WORKSPACE_SWIPE_HORIZONTAL: + direction = SWIPE_GESTURE_DIRECTION_HORIZONTAL; + delta_sum = tracker->dx + event->dx * invert; + break; + case GESTURE_TYPE_WORKSPACE_SWIPE_VERTICAL: + direction = SWIPE_GESTURE_DIRECTION_VERTICAL; + delta_sum = tracker->dy + event->dy * invert; + break; + default: + return; + } + if (direction != ws_scroll->direction) { return; } @@ -1197,6 +1212,13 @@ void workspace_scroll_update(struct sway_seat *seat, double delta_sum, } } } + + // Update the tracker data if we aren't exceeding the max swipe limit + if (percent < max && percent > min) { + tracker->dx += event->dx * invert; + tracker->dy += event->dy * invert; + } + ws_scroll->percent = CLAMP(percent, min, max); ws_scroll->direction = direction; diff --git a/sway/input/seatop_default.c b/sway/input/seatop_default.c index d6a3b7490..1e52c9893 100644 --- a/sway/input/seatop_default.c +++ b/sway/input/seatop_default.c @@ -1057,20 +1057,7 @@ static void handle_swipe_update(struct sway_seat *seat, if (binding) { int invert = binding->flags & BINDING_INVERTED ? 1 : -1; - tracker->dx += event->dx * invert; - tracker->dy += event->dy * invert; - switch (binding->gesture.type) { - case GESTURE_TYPE_WORKSPACE_SWIPE_HORIZONTAL: - workspace_scroll_update(seat, tracker->dx, - SWIPE_GESTURE_DIRECTION_HORIZONTAL); - break; - case GESTURE_TYPE_WORKSPACE_SWIPE_VERTICAL: - workspace_scroll_update(seat, tracker->dy, - SWIPE_GESTURE_DIRECTION_VERTICAL); - break; - default: - break; - } + workspace_scroll_update(seat, tracker, event, invert); } } else { // ... otherwise forward to client