seatop_move_floating: make container respect pointer constraint
This commit is contained in:
parent
1f469e1692
commit
d159b98744
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
struct seatop_move_floating_event {
|
struct seatop_move_floating_event {
|
||||||
struct sway_container *con;
|
struct sway_container *con;
|
||||||
|
double dx, dy; // cursor offset in container
|
||||||
};
|
};
|
||||||
|
|
||||||
static void handle_button(struct sway_seat *seat, uint32_t time_msec,
|
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,
|
static void handle_motion(struct sway_seat *seat, uint32_t time_msec,
|
||||||
double dx, double dy) {
|
double dx, double dy) {
|
||||||
struct seatop_move_floating_event *e = seat->seatop_data;
|
struct seatop_move_floating_event *e = seat->seatop_data;
|
||||||
|
struct wlr_cursor *cursor = seat->cursor->cursor;
|
||||||
desktop_damage_whole_container(e->con);
|
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);
|
desktop_damage_whole_container(e->con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,18 +49,21 @@ void seatop_begin_move_floating(struct sway_seat *seat,
|
||||||
struct sway_container *con) {
|
struct sway_container *con) {
|
||||||
seatop_end(seat);
|
seatop_end(seat);
|
||||||
|
|
||||||
|
struct sway_cursor *cursor = seat->cursor;
|
||||||
struct seatop_move_floating_event *e =
|
struct seatop_move_floating_event *e =
|
||||||
calloc(1, sizeof(struct seatop_move_floating_event));
|
calloc(1, sizeof(struct seatop_move_floating_event));
|
||||||
if (!e) {
|
if (!e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e->con = con;
|
e->con = con;
|
||||||
|
e->dx = cursor->cursor->x - con->x;
|
||||||
|
e->dy = cursor->cursor->y - con->y;
|
||||||
|
|
||||||
seat->seatop_impl = &seatop_impl;
|
seat->seatop_impl = &seatop_impl;
|
||||||
seat->seatop_data = e;
|
seat->seatop_data = e;
|
||||||
|
|
||||||
container_raise_floating(con);
|
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);
|
wlr_seat_pointer_clear_focus(seat->wlr_seat);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue