Rémi Bernon (@rbernon) commented about dlls/winex11.drv/mouse.c:
/* need to ungrab the pointer that may have been automatically grabbed * with a ButtonPress event */
- XUngrabPointer( display, CurrentTime );
- if (!clipping_cursor)
XUngrabPointer( display, CurrentTime );
- /* unclip it during drag, see Wine-Bug 53831 */
- if (x11drv_thread_data() && x11drv_thread_data()->clipping_cursor)
- {
was_clipped = TRUE;
ungrab_clipping_window();
- }
Maybe it would be better to use `NtUserClipCursor( NULL )` here, I don't think ungrabbing the cursor from another process does anything, and I'd say it's not completely obvious that the current thread is also the foreground one?
Maybe test whether WM_SYSCOMMAND does that already? Is the cursor still constrained on Windows when you move the window? If not, maybe we can just clear the Win32 clipping rect regardless?