Commit 5dbe1360 authored by Aric Stewart's avatar Aric Stewart Committed by Alexandre Julliard

dinput: Create generic joystick Acquire/Unacquire.

parent 36f538eb
...@@ -32,6 +32,40 @@ ...@@ -32,6 +32,40 @@
WINE_DEFAULT_DEBUG_CHANNEL(dinput); 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 * SetProperty : change input device properties
*/ */
HRESULT WINAPI JoystickAGenericImpl_SetProperty( HRESULT WINAPI JoystickAGenericImpl_SetProperty(
......
...@@ -605,13 +605,13 @@ const struct dinput_device joystick_linux_device = { ...@@ -605,13 +605,13 @@ const struct dinput_device joystick_linux_device = {
static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
{ {
JoystickImpl *This = (JoystickImpl *)iface; JoystickImpl *This = (JoystickImpl *)iface;
HRESULT res;
TRACE("(%p)\n",This); TRACE("(%p)\n",This);
if (This->generic.base.acquired) { res = JoystickAGenericImpl_Acquire(iface);
WARN("already acquired\n"); if (res != DI_OK)
return S_FALSE; return res;
}
/* open the joystick device */ /* open the joystick device */
if (This->joyfd==-1) { if (This->joyfd==-1) {
...@@ -620,12 +620,11 @@ static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) ...@@ -620,12 +620,11 @@ static HRESULT WINAPI JoystickLinuxAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
This->joyfd=open(This->dev,O_RDONLY); This->joyfd=open(This->dev,O_RDONLY);
if (This->joyfd==-1) { if (This->joyfd==-1) {
ERR("open(%s) failed: %s\n", This->dev, strerror(errno)); ERR("open(%s) failed: %s\n", This->dev, strerror(errno));
JoystickAGenericImpl_Unacquire(iface);
return DIERR_NOTFOUND; return DIERR_NOTFOUND;
} }
} }
This->generic.base.acquired = 1;
return DI_OK; return DI_OK;
} }
...@@ -639,7 +638,10 @@ static HRESULT WINAPI JoystickLinuxAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) ...@@ -639,7 +638,10 @@ static HRESULT WINAPI JoystickLinuxAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
TRACE("(%p)\n",This); 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) { if (This->joyfd!=-1) {
TRACE("closing joystick device\n"); TRACE("closing joystick device\n");
......
...@@ -78,4 +78,8 @@ HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface); ...@@ -78,4 +78,8 @@ HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface);
HRESULT WINAPI JoystickAGenericImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface, HRESULT WINAPI JoystickAGenericImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,
DWORD len, LPVOID ptr); DWORD len, LPVOID ptr);
HRESULT WINAPI JoystickAGenericImpl_Acquire(LPDIRECTINPUTDEVICE8A iface);
HRESULT WINAPI JoystickAGenericImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface);
#endif /* __WINE_DLLS_DINPUT_JOYSTICK_PRIVATE_H */ #endif /* __WINE_DLLS_DINPUT_JOYSTICK_PRIVATE_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment