Rémi Bernon (@rbernon) commented about dlls/winewayland.drv/wayland_pointer.c:
+ RECT window_clip; + + TRACE("clip=%s reset=%d\n", wine_dbgstr_rect(clip), reset); + + if (NtUserGetWindowThread(hwnd, NULL) != GetCurrentThreadId()) + { + pthread_mutex_lock(&pointer->mutex); + if (pointer->zwp_confined_pointer_v1) + { + zwp_confined_pointer_v1_destroy(pointer->zwp_confined_pointer_v1); + pointer->zwp_confined_pointer_v1 = NULL; + TRACE("Unconfining due to foreground thread mismatch\n"); + } + pthread_mutex_unlock(&pointer->mutex); + return TRUE; + } How can it happen exactly that we have an active pointer grab but still end up with the pointer entering a different window (or even a different thread's)? Does it even matter? And if it does, do we actually need to unconfine the cursor then?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4593#note_54904