~ruther/dwl

39946e07f2b2ac09cfa622668585f2223fc277d4 — Guido Cella 4 years ago f80f088
fix keyboard focus with overlays

Don't let internal calls to motionnotify(0) meant to update the pointer
focus from maplayersurfacenotify and destroylayersurfacenotify also
shift the keyboard focus to the surface under the cursor with
sloppyfocus.
1 files changed, 8 insertions(+), 7 deletions(-)

M dwl.c
M dwl.c => dwl.c +8 -7
@@ 1412,12 1412,6 @@ motionabsolute(struct wl_listener *listener, void *data)
void
motionnotify(uint32_t time)
{
	struct timespec now;
	if (!time) {
		clock_gettime(CLOCK_MONOTONIC, &now);
		time = now.tv_sec * 1000 + now.tv_nsec / 1000000;
	}

	wlr_idle_notify_activity(idle, seat);

	/* Update selmon (even while dragging a window) */


@@ 1608,6 1602,13 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
		return;
	}

	bool internal_call = !time;
	if (!time) {
		struct timespec now;
		clock_gettime(CLOCK_MONOTONIC, &now);
		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);


@@ 1626,7 1627,7 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
		return;
#endif

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


Do not follow this link