http://bugs.winehq.org/show_bug.cgi?id=881
--- Comment #52 from Eli sharparrow1@yahoo.com 2008-02-09 07:29:25 --- Okay, so I actually tried looking at this closely, and it's actually a pretty tricky issue (although probably easy to solve for anyone who has touched the relevant code before). The issue is that whatever the initial cursor happens to be, that initial cursor needs to be communicated to the driver.
The x11 driver's initial cursor is a cursor which does not correspond to *any* of the builtin cursors in wine's user32. Therefore, no matter what the default is, winex11 needs to be told sometime after initialization what the currect cursor is. Currently, winex11 doesn't get any information until some application sets its cursor; since 99% of applications do set their cursor to something non-null soon after window creation, the issue isn't normally visible.
Therefore, to get this correct in general, either every thread needs to tell the driver its default cursor on creation, or both user32 and the driver need to have the same default cursor. I'm having a bit of trouble figuring out what would be the best approach, though.
gbrammer's patch works around this issue by forcing SetCursor(NULL) to always communicate with x11drv, so despite the fact that wine thinks that there is no cursor, the SetCursor call still does the right thing.
Side notes: IDC_WAIT would be the Windows-compatible default cursor; if we're going to go to the trouble of fixing this, we should probably match the Windows default.
The default winex11 arrow cursor on my computer is the gnome arrow cursor; it's a bit different from the wine arrow cursor in that it has a shadow and the stem is a bit shorter. It would be nice if Wine used the same arrow, but that's a separate issue.