simplify pointerfocus

Similar to focusclient
main
Devin J. Pohly 2020-07-31 14:00:00 -05:00
parent 90d80c0de9
commit 2dbe5c6063
1 changed files with 9 additions and 9 deletions

18
dwl.c
View File

@ -1054,21 +1054,21 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
if (c && !surface) if (c && !surface)
surface = WLR_SURFACE(c); surface = WLR_SURFACE(c);
/* If surface is already focused, only notify of motion */ /* If surface is NULL, clear pointer focus */
if (surface && surface == seat->pointer_state.focused_surface) {
wlr_seat_pointer_notify_motion(seat, time, sx, sy);
return;
}
/* If surface is NULL, clear pointer focus, otherwise let the client
* know that the mouse cursor has entered one of its surfaces. */
if (!surface) { if (!surface) {
wlr_seat_pointer_notify_clear_focus(seat); wlr_seat_pointer_notify_clear_focus(seat);
return; return;
} }
/* If surface is already focused, only notify of motion */
if (surface == seat->pointer_state.focused_surface) {
wlr_seat_pointer_notify_motion(seat, time, sx, sy);
return;
}
/* Otherwise, let the client know that the mouse cursor has entered one
* of its surfaces, and make keyboard focus follow if desired. */
wlr_seat_pointer_notify_enter(seat, surface, sx, sy); wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
/* If keyboard focus follows mouse, enforce that */
if (sloppyfocus) if (sloppyfocus)
focusclient(c, surface, 0); focusclient(c, surface, 0);
} }