Rémi Bernon (@rbernon) commented about dlls/winewayland.drv/wayland_pointer.c:
{ TRACE("surface=%p hwnd=%p\n", surface, surface->hwnd); process_wayland.pointer.surface = surface; + process_wayland.pointer.enter_serial = serial; + /* The cursor is undefined at every enter, so we set it again with + * the latest information we have. */ + wl_pointer_set_cursor(process_wayland.pointer.wl_pointer, + process_wayland.pointer.enter_serial, + surface->cursor.wl_surface, + surface->cursor.hotspot_x, + surface->cursor.hotspot_y);
Do we have to set the cursor here? Could it wait until `SetCursor` is called instead? Fwiw it should be called on every window/cursor change now, and I think it would save you the need to keep the window cursor surface around, unless it is required after `wl_pointer_set_cursor`. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/3686#note_43876