From d159b987442795fa4af5cc58fc0a6055a86aa735 Mon Sep 17 00:00:00 2001 From: Ronan Pigott Date: Mon, 4 Nov 2019 12:37:07 -0700 Subject: [PATCH] seatop_move_floating: make container respect pointer constraint --- sway/input/seatop_move_floating.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sway/input/seatop_move_floating.c b/sway/input/seatop_move_floating.c index 8f133c36f..672e2d69e 100644 --- a/sway/input/seatop_move_floating.c +++ b/sway/input/seatop_move_floating.c @@ -6,6 +6,7 @@ struct seatop_move_floating_event { struct sway_container *con; + double dx, dy; // cursor offset in container }; static void handle_button(struct sway_seat *seat, uint32_t time_msec, @@ -25,8 +26,9 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec, static void handle_motion(struct sway_seat *seat, uint32_t time_msec, double dx, double dy) { struct seatop_move_floating_event *e = seat->seatop_data; + struct wlr_cursor *cursor = seat->cursor->cursor; desktop_damage_whole_container(e->con); - container_floating_translate(e->con, dx, dy); + container_floating_move_to(e->con, cursor->x - e->dx, cursor->y - e->dy); desktop_damage_whole_container(e->con); } @@ -47,18 +49,21 @@ void seatop_begin_move_floating(struct sway_seat *seat, struct sway_container *con) { seatop_end(seat); + struct sway_cursor *cursor = seat->cursor; struct seatop_move_floating_event *e = calloc(1, sizeof(struct seatop_move_floating_event)); if (!e) { return; } e->con = con; + e->dx = cursor->cursor->x - con->x; + e->dy = cursor->cursor->y - con->y; seat->seatop_impl = &seatop_impl; seat->seatop_data = e; container_raise_floating(con); - cursor_set_image(seat->cursor, "grab", NULL); + cursor_set_image(cursor, "grab", NULL); wlr_seat_pointer_clear_focus(seat->wlr_seat); }