http://bugs.winehq.org/show_bug.cgi?id=27522
--- Comment #18 from William Pettersson william.pettersson+wine@gmail.com 2011-07-07 09:39:34 CDT --- Created an attachment (id=35464) --> (http://bugs.winehq.org/attachment.cgi?id=35464) Adds XI_ButtonPress to events registered for processing
Just ran some trace logs (WINEDEBUG=trace+cursor) and noticed the following: While the mouse is captured, and I'm holding down a mouse button, no RawMotion events are seen. However, if the mouse is not captured, then I do see RawMotion events while holding down a mouse button and moving the mouse.
I think this might have something to do with passive grabbing. Reading from http://www.mail-archive.com/xorg-devel@lists.x.org/msg16250.html it seems like that basic test program has the exact same issue, while holding down a mouse button, the app doesn't "see" motion events any more.
Reading further on http://comments.gmane.org/gmane.comp.freedesktop.xorg.devel/21612 it seems like this is intended behaviour.
This behaviour holds with both RawButtonPress/RawMotion and ButtonPress/Motion, it appears that if we don't register for the button press, then any motion events that come after between a press and a release won't be sent to the calling application.
It seems like just registering for the ButtonPress event, however, is all that we need to get a "passive grab" which then gives us the RawMotion events again.
The attached file simply just registers the XI_ButtonPress, and it "fixes" the issue for me. I am not sure why this issue only shows up when the mouse is set to be captured, and it seems like a hack to me, but I think the only proper solution is to fully implement libXi mouse button presses as well, so I don't know whether this is worthwhile as a stopgap measure.