~ruther/dwl

0815626d4c4db3aa05ed256975476d6a31be2125 — Leonardo Hernández Hernández 3 years ago 1b22ef1
pointerfocus: only use provided surface

if a client is given focus it
1 files changed, 6 insertions(+), 16 deletions(-)

M dwl.c
M dwl.c => dwl.c +6 -16
@@ 1540,9 1540,8 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
	struct timespec now;
	int internal_call = !time;

	/* Use top level surface if nothing more specific given */
	if (c && !surface)
		surface = client_surface(c);
	if (sloppyfocus && !internal_call && c && !client_is_unmanaged(c))
		focusclient(c, 0);

	/* If surface is NULL, clear pointer focus */
	if (!surface) {


@@ 1555,21 1554,12 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
		time = now.tv_sec * 1000 + now.tv_nsec / 1000000;
	}

	/* 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. */
	/* Let the client know that the mouse cursor has entered one
	 * of its surfaces, and make keyboard focus follow if desired.
	 * wlroots makes this a no-op if surface is already focused */
	wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
	wlr_seat_pointer_notify_motion(seat, time, sx, sy);

	if (!c || client_is_unmanaged(c))
		return;

	if (sloppyfocus && !internal_call)
		focusclient(c, 0);
}

void

Do not follow this link