clients now works as expected in drag motion

This commit is contained in:
Leonardo Hernández Hernández 2022-03-22 15:02:02 -06:00
parent 330792b1fc
commit 9aec6049ec
No known key found for this signature in database
GPG Key ID: E538897EE11B9624

13
dwl.c
View File

@ -1416,16 +1416,11 @@ motionnotify(uint32_t time)
/* time is 0 in internal calls meant to restore pointer focus. */ /* time is 0 in internal calls meant to restore pointer focus. */
if (time) { if (time) {
struct wlr_drag_icon *icon;
wlr_idle_notify_activity(idle, seat); wlr_idle_notify_activity(idle, seat);
/* Update selmon (even while dragging a window) */ /* Update selmon (even while dragging a window) */
if (sloppyfocus) if (sloppyfocus)
selmon = xytomon(cursor->x, cursor->y); selmon = xytomon(cursor->x, cursor->y);
if (seat->drag && (icon = seat->drag->icon))
wlr_scene_node_set_position(icon->data, cursor->x + icon->surface->sx,
cursor->y + icon->surface->sy);
} }
/* If we are currently grabbing the mouse, handle and return */ /* If we are currently grabbing the mouse, handle and return */
@ -1564,6 +1559,7 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
{ {
struct timespec now; struct timespec now;
int internal_call = !time; int internal_call = !time;
struct wlr_drag_icon *icon;
if (sloppyfocus && !internal_call && c && !client_is_unmanaged(c)) if (sloppyfocus && !internal_call && c && !client_is_unmanaged(c))
focusclient(c, 0); focusclient(c, 0);
@ -1585,6 +1581,13 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
wlr_seat_pointer_notify_enter(seat, surface, sx, sy); wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
wlr_seat_pointer_notify_motion(seat, time, sx, sy); wlr_seat_pointer_notify_motion(seat, time, sx, sy);
/* If there are is a drag icon, update its position */
/* For anyone who wants to change this function: for some reason
* (maybe a wlroots bug?, or is it intended?) if we change the node position
* before telling the seat for a motion, the clients don't recognize the drag */
if (seat->drag && (icon = seat->drag->icon))
wlr_scene_node_set_position(icon->data, cursor->x + icon->surface->sx,
cursor->y + icon->surface->sy);
} }
void void