/****************************************************************************** * Acquire : gets exclusive control of the joystick */ static HRESULT WINAPI JoystickLinuxWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) { JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); HRESULT res; TRACE("(%p)\n",This); res = IDirectInputDevice2WImpl_Acquire(iface); if (res != DI_OK) return res; /* open the joystick device */ if (This->joyfd==-1) { TRACE("opening joystick device %s\n", This->joydev->device); This->joyfd = open(This->joydev->device, O_RDONLY); if (This->joyfd==-1) { ERR("open(%s) failed: %s\n", This->joydev->device, strerror(errno)); IDirectInputDevice2WImpl_Unacquire(iface); return DIERR_NOTFOUND; } } return DI_OK; }
/****************************************************************************** * Unacquire : frees the mouse */ static HRESULT WINAPI SysMouseWImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface) { SysMouseImpl *This = impl_from_IDirectInputDevice8W(iface); HRESULT res; TRACE("(this=%p)\n",This); if ((res = IDirectInputDevice2WImpl_Unacquire(iface)) != DI_OK) return res; if (This->base.dwCoopLevel & DISCL_EXCLUSIVE) { ClipCursor(NULL); ShowCursor(TRUE); /* show cursor */ This->clipped = FALSE; } /* And put the mouse cursor back where it was at acquire time */ if (This->base.dwCoopLevel & DISCL_EXCLUSIVE || This->warp_override == WARP_FORCE_ON) { TRACE("warping mouse back to %s\n", wine_dbgstr_point(&This->org_coords)); SetCursorPos(This->org_coords.x, This->org_coords.y); } return DI_OK; }
/****************************************************************************** * Unacquire : frees the joystick */ static HRESULT WINAPI JoystickLinuxWImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface) { JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); HRESULT res; TRACE("(%p)\n",This); res = IDirectInputDevice2WImpl_Unacquire(iface); if (res != 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; }