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? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1153#note_35910