/****************************************************************************** * Unacquire : frees the joystick */ static HRESULT WINAPI JoystickAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *This = (JoystickImpl *)iface; HRESULT res; TRACE("(this=%p)\n",This); res = IDirectInputDevice2AImpl_Unacquire(iface); if (res==DI_OK && This->joyfd!=-1) { close(This->joyfd); This->joyfd = -1; } return res; }
/****************************************************************************** * Unacquire : frees the joystick */ static HRESULT WINAPI JoystickAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *This = (JoystickImpl *)iface; HRESULT res; TRACE("(%p)\n",This); if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; if (This->joyfd!=-1) { TRACE("closing joystick device\n"); close(This->joyfd); This->joyfd = -1; return DI_OK; } return DI_NOEFFECT; }
/****************************************************************************** * Unacquire : frees the mouse */ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { SysMouseImpl *This = (SysMouseImpl *)iface; HRESULT res; TRACE("(this=%p)\n",This); if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; if (This->base.dwCoopLevel & DISCL_EXCLUSIVE) { ClipCursor(NULL); ShowCursor(TRUE); /* show cursor */ } /* And put the mouse cursor back where it was at acquire time */ if (This->base.dwCoopLevel & DISCL_EXCLUSIVE) { TRACE(" warping mouse back to (%d , %d)\n", This->org_coords.x, This->org_coords.y); SetCursorPos(This->org_coords.x, This->org_coords.y); } return DI_OK; }
/****************************************************************************** * Acquire : gets exclusive control of the joystick */ static HRESULT WINAPI JoystickAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *This = (JoystickImpl *)iface; HRESULT res; TRACE("(this=%p)\n",This); res = IDirectInputDevice2AImpl_Acquire(iface); if (res==DI_OK) { if (-1==(This->joyfd=open(This->joydev->device,O_RDWR))) { if (-1==(This->joyfd=open(This->joydev->device,O_RDONLY))) { /* Couldn't open the device at all */ perror(This->joydev->device); IDirectInputDevice2AImpl_Unacquire(iface); return DIERR_NOTFOUND; } else { /* Couldn't open in r/w but opened in read-only. */ WARN("Could not open %s in read-write mode. Force feedback will be disabled.\n", This->joydev->device); } } } return res; }