Paul TBBle Hampson wrote: > On Sun, Apr 19, 2009 at 12:46:20PM +0200, Stefan Dösinger wrote: >> Am Sonntag, 19. April 2009 10:41:34 schrieb Paul TBBle Hampson: >>> I've thrown together a rather-rough-but-working-in-a-limited-sense >>> implementation of XInput2-based DirectInput. > >>> * Doesn't check for XInput2.h, so it won't build without it. (Laziness) >>> It will _run_ without XInput2, falling back to the current dinput >>> WndProc hooks even if compiled with XInput2 support. >> I'm not that much into all the input code, but I always understood it the >> way >> that dinput should always use WndProc hooks, and winex11.drv implements the >> relative movement part either with XI2 or warping if XI2 is not available. >> Ie, there should be no difference between XI2 and legacy operation in >> dinput.dll. That would, I think, make native dinput work as well as the >> builtin one, and help apps that rely on hooks the same way native dinput >> does(if there are any). > >> The problem is that this means the warping has to be moved to winex11, which >> is something Vitaliy tried before and failed > >> I could be entirely wrong with that though. And I have no idea how that >> would >> affect mouse grabbing, or window focus issues etc. > > A WndProc hook can only work for Foreground-mode DI. In background mode, > you still expect to get movement messages without being in a position to > receive WM_MOUSEMOVE or WM_KEYPRESS. Not necessarily. Hook is for raw mouse & keyboard events, and they are being generated by the devices themselves. On native this works regardless of where the pointer is.
> Moving the WndProc hook and mouse-warping behaviour to X11 would > certainly be possible, and I suspect it'd end up somewhat with a mouse > driver in dinput which is almost exactly what my gdimouse is, which is > basically the existing mouse driver except that it feeds Acquire and > Deacquire to X11drv and receives messages from X11drv when an event > happens. It would need to go into X11drv to implement another input API - RawInput. > I haven't read Vitaly's old patches for moving mouse warping to X11drv > recently, but I did read them a while ago. The problem with moving the > warping to X11drv is that then every graphics driver _must_ implement > the hooks I've added in my patches, where as right now we have a > fallback mouse support mode which will work with any graphics driver, > and in fact would also work on Windows (I believe) because it simply > hooks WndProc, and does not need "real hardware" access, and has > well-documented and under-documented limitations because of it. You'll always have current option of receiving standard pointer events. This doesn't go away. > It also demonstrates another problem with current Wine DI. If you put > its window up to the edge of the screen, and push your mouse against the > edge of the screen, your mouse movement against the edge of the screen > is lost. Yup, that's one of the biggest problems with current implementation. Which can't be resolved in non-exclusive mode without XI2. Vitaliy.