commit d159b987442795fa4af5cc58fc0a6055a86aa735
parent 1f469e1692ea05720afb32ebf038afa19bd27154
Author: Ronan Pigott <rpigott@berkeley.edu>
Date: Mon, 4 Nov 2019 12:37:07 -0700
seatop_move_floating: make container respect pointer constraint
Diffstat:
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git 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);
}