diff options
author | Ronan Pigott <rpigott@berkeley.edu> | 2019-11-04 12:37:07 -0700 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-11-04 23:53:30 +0100 |
commit | d159b987442795fa4af5cc58fc0a6055a86aa735 (patch) | |
tree | b12c142b450c60e5c9e9071e7dea33fbc40ac4f0 /sway | |
parent | 1f469e1692ea05720afb32ebf038afa19bd27154 (diff) |
seatop_move_floating: make container respect pointer constraint
Diffstat (limited to 'sway')
-rw-r--r-- | sway/input/seatop_move_floating.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sway/input/seatop_move_floating.c b/sway/input/seatop_move_floating.c index 8f133c36..672e2d69 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); } |