DInput mouse - where to go from here?

Vitaliy Margolen wine-devel at kievinfo.com
Wed Sep 26 23:07:36 CDT 2007

As many of you know, Wine have number of serious problems when it comes down 
to games when using mouse. In fact big number of games suffer one or more of 
the following problems:
1. Mouse pointer escapes game window (for windowed programs) or confined to 
arbitrary rectangle (for full-screen) - bug 6971.
2. Mouse is being constantly re-centered (number of bugs).
3. Mouse lags, moves wrong direction or doesn't move at all (number of bugs).
4. Mouse is not smooth with high graphics/system load.

There are lots of reasons for these bugs:
a) Wine does not grab pointer (doesn't lock it to one particular window).
b) Wine's dinput still doing mouse warping while it should not
c) Wine relies on an application to process messages so new input events 
could be received.
d) Wine's x11drv is not fine grained - it has only one lock that everything 
uses, d3d and wgl included.
e) The path from x11drv to dinput for input events is long with big overhead.
f) X events come from Wine windows for the current process only not whole 
g) Motion events Wine receives are absolute not relative.

Here is what me and others tried but failed:
i) XEvIE - buggy, disabled by default, requires server round trip.
ii) XInput - does not allow opening of keyboard or mouse devices.
iii) Event Device (EvDev) - works perfectly, solves (a,b,c,d,e,f,g) but it's 
a client only solution (will not work on remote X, because it will try to 
open remote mouse, not local).
iv) Virtualizing mouse pointer in x11drv - depends on (a) moves (b) from 
dinput into x11drv while same issues remain.
v) Writing new X extension - last I've heard about this, it didn't get 
anywhere past initial proposals.

Anything else I missed? Are there are any better ways to solve these 
problems? Any other ways at all?

As you see there are not much options available to solve mouse problems. 
However I personally do not want to turn this into another "child opengl 
saga". We ether solving it now, or putting a big red X on any game that's 
using dinput mouse, that's not already working.

The point I'm trying to make is: can we once put our "right ways of doing 
things" aside and fix something that never worked before? And fix it _for 
good_! Yes it's a limited fix it will work only for 99% of users who play 
games on their PC, and not remotely.

Vitaliy Margolen.

More information about the wine-devel mailing list