Put the first click after crossing onto a screen where the pointer is

KWin's nested backend ignores the position in wl_pointer.enter, and
wlroots drops a motion to the position it entered at, so KWin kept its old
pointer until the next move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DeeJanuzandClaude Opus 5.5 committed 2026-09-29 23:14:09 -06:00
1 parent 42a755b9f4
commit 4859412126
1 file changed
+6 -1
+6 -1
View File
@@ -272,7 +272,12 @@ static void handle_vr_event(const struct ft_event *e, void *data) {
case FT_MOTION:
case FT_BUTTON:
if (s->pointer_focus != sc) {
wlr_seat_pointer_notify_enter(s->seat, surface, x, y);
// KWin's nested backend ignores the position in wl_pointer.enter, and wlroots
// drops a motion to the position it entered at, so KWin would keep its old
// pointer until the next move: a press right after crossing onto another
// screen landed where the pointer had been. Entering one unit off makes the
// motion below go through.
wlr_seat_pointer_notify_enter(s->seat, surface, x + 1, y);
s->pointer_focus = sc;
}
wlr_seat_pointer_notify_motion(s->seat, t, x, y);