mirror of
https://github.com/swaywm/sway.git
synced 2024-11-29 03:11:27 +00:00
input/seat: locally compute drag icon offset
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3861
This commit is contained in:
parent
e1be46875d
commit
024c3e4428
|
@ -72,6 +72,7 @@ struct sway_drag_icon {
|
||||||
struct wl_list link; // sway_root::drag_icons
|
struct wl_list link; // sway_root::drag_icons
|
||||||
|
|
||||||
double x, y; // in layout-local coordinates
|
double x, y; // in layout-local coordinates
|
||||||
|
int dx, dy; // offset in surface-local coordinates
|
||||||
|
|
||||||
struct wl_listener surface_commit;
|
struct wl_listener surface_commit;
|
||||||
struct wl_listener map;
|
struct wl_listener map;
|
||||||
|
|
|
@ -382,8 +382,8 @@ void drag_icon_update_position(struct sway_drag_icon *icon) {
|
||||||
case WLR_DRAG_GRAB_KEYBOARD:
|
case WLR_DRAG_GRAB_KEYBOARD:
|
||||||
return;
|
return;
|
||||||
case WLR_DRAG_GRAB_KEYBOARD_POINTER:
|
case WLR_DRAG_GRAB_KEYBOARD_POINTER:
|
||||||
icon->x = cursor->x + wlr_icon->surface->sx;
|
icon->x = cursor->x + icon->dx;
|
||||||
icon->y = cursor->y + wlr_icon->surface->sy;
|
icon->y = cursor->y + icon->dy;
|
||||||
break;
|
break;
|
||||||
case WLR_DRAG_GRAB_KEYBOARD_TOUCH:;
|
case WLR_DRAG_GRAB_KEYBOARD_TOUCH:;
|
||||||
struct wlr_touch_point *point =
|
struct wlr_touch_point *point =
|
||||||
|
@ -391,8 +391,8 @@ void drag_icon_update_position(struct sway_drag_icon *icon) {
|
||||||
if (point == NULL) {
|
if (point == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
icon->x = seat->touch_x + wlr_icon->surface->sx;
|
icon->x = seat->touch_x + icon->dx;
|
||||||
icon->y = seat->touch_y + wlr_icon->surface->sy;
|
icon->y = seat->touch_y + icon->dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
drag_icon_damage_whole(icon);
|
drag_icon_damage_whole(icon);
|
||||||
|
@ -402,6 +402,9 @@ static void drag_icon_handle_surface_commit(struct wl_listener *listener,
|
||||||
void *data) {
|
void *data) {
|
||||||
struct sway_drag_icon *icon =
|
struct sway_drag_icon *icon =
|
||||||
wl_container_of(listener, icon, surface_commit);
|
wl_container_of(listener, icon, surface_commit);
|
||||||
|
struct wlr_drag_icon *wlr_icon = icon->wlr_drag_icon;
|
||||||
|
icon->dx += wlr_icon->surface->current.dx;
|
||||||
|
icon->dy += wlr_icon->surface->current.dy;
|
||||||
drag_icon_update_position(icon);
|
drag_icon_update_position(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue