Module: wine Branch: master Commit: 5dbe136027463a3c14d8379408167e2b3e274caa URL: http://source.winehq.org/git/wine.git/?a=commit;h=5dbe136027463a3c14d8379408...
Author: Aric Stewart aric@codeweavers.com Date: Mon Mar 9 10:07:35 2009 -0500
dinput: Create generic joystick Acquire/Unacquire.
---
dlls/dinput/joystick.c | 34 ++++++++++++++++++++++++++++++++++ dlls/dinput/joystick_linux.c | 16 +++++++++------- dlls/dinput/joystick_private.h | 4 ++++ 3 files changed, 47 insertions(+), 7 deletions(-)
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c index a19cf27..6e7e7ef 100644 --- a/dlls/dinput/joystick.c +++ b/dlls/dinput/joystick.c @@ -32,6 +32,40 @@ WINE_DEFAULT_DEBUG_CHANNEL(dinput);
/****************************************************************************** + * Acquire : gets exclusive control of the joystick + */ +HRESULT WINAPI JoystickAGenericImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) +{ + JoystickGenericImpl *This = (JoystickGenericImpl *)iface; + + TRACE("(%p)\n",This); + + if (This->base.acquired) { + WARN("already acquired\n"); + return S_FALSE; + } + + This->base.acquired = 1; + + return DI_OK; +} + +/****************************************************************************** + * Unacquire : frees the joystick + */ +HRESULT WINAPI JoystickAGenericImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) +{ + JoystickGenericImpl *This = (JoystickGenericImpl *)iface; + HRESULT res; + + TRACE("(%p)\n",This); + + if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; + + return DI_OK; +} + +/****************************************************************************** * SetProperty : change input device properties */ HRESULT WINAPI JoystickAGenericImpl_SetProperty( diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 67ec02b..afabebe 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -605,13 +605,13 @@ const struct dinput_device joystick_linux_device = { static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *This = (JoystickImpl *)iface; + HRESULT res;
TRACE("(%p)\n",This);
- if (This->generic.base.acquired) { - WARN("already acquired\n"); - return S_FALSE; - } + res = JoystickAGenericImpl_Acquire(iface); + if (res != DI_OK) + return res;
/* open the joystick device */ if (This->joyfd==-1) { @@ -620,12 +620,11 @@ static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) This->joyfd=open(This->dev,O_RDONLY); if (This->joyfd==-1) { ERR("open(%s) failed: %s\n", This->dev, strerror(errno)); + JoystickAGenericImpl_Unacquire(iface); return DIERR_NOTFOUND; } }
- This->generic.base.acquired = 1; - return DI_OK; }
@@ -639,7 +638,10 @@ static HRESULT WINAPI JoystickLinuxAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
TRACE("(%p)\n",This);
- if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; + res = JoystickAGenericImpl_Unacquire(iface); + + if (res != DI_OK) + return res;
if (This->joyfd!=-1) { TRACE("closing joystick device\n"); diff --git a/dlls/dinput/joystick_private.h b/dlls/dinput/joystick_private.h index e1709e9..b61406f 100644 --- a/dlls/dinput/joystick_private.h +++ b/dlls/dinput/joystick_private.h @@ -78,4 +78,8 @@ HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface); HRESULT WINAPI JoystickAGenericImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface, DWORD len, LPVOID ptr);
+HRESULT WINAPI JoystickAGenericImpl_Acquire(LPDIRECTINPUTDEVICE8A iface); + +HRESULT WINAPI JoystickAGenericImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface); + #endif /* __WINE_DLLS_DINPUT_JOYSTICK_PRIVATE_H */