diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index 618665f0540..1dc6e4ae78a 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -563,7 +563,10 @@ HRESULT WINAPI IDirectInputDevice2AImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) res = This->acquired ? S_FALSE : DI_OK; This->acquired = 1; if (res == DI_OK) + { This->queue_head = This->queue_tail = This->overflow = 0; + check_dinput_hooks(iface); + } LeaveCriticalSection(&This->crit); return res; @@ -581,6 +584,8 @@ HRESULT WINAPI IDirectInputDevice2AImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) EnterCriticalSection(&This->crit); res = !This->acquired ? DI_NOEFFECT : DI_OK; This->acquired = 0; + if (res == DI_OK) + check_dinput_hooks(iface); LeaveCriticalSection(&This->crit); return res; diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index b723de389c4..20550c7d6cd 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -854,12 +854,12 @@ static BOOL check_hook_thread(void) return hook_thread_hwnd != 0; } -HHOOK set_dinput_hook(int hook_id, LPVOID proc) +void check_dinput_hooks(LPDIRECTINPUTDEVICE8A iface) { HWND hwnd; EnterCriticalSection(&dinput_hook_crit); hwnd = hook_thread_hwnd; LeaveCriticalSection(&dinput_hook_crit); - return (HHOOK)SendMessageW(hwnd, WM_USER+0x10, (WPARAM)hook_id, (LPARAM)proc); + SendMessageW(hwnd, WM_USER+0x10, 1, 0); } diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h index 4bce692d88f..a371263e875 100644 --- a/dlls/dinput/dinput_private.h +++ b/dlls/dinput/dinput_private.h @@ -57,7 +57,7 @@ extern const struct dinput_device joystick_linuxinput_device; extern HINSTANCE DINPUT_instance; -extern HHOOK set_dinput_hook(int hook_id, LPVOID proc); +extern void check_dinput_hooks(LPDIRECTINPUTDEVICE8A); typedef void (*DI_EVENT_PROC)(LPDIRECTINPUTDEVICE8A, WPARAM, LPARAM); #endif /* __WINE_DLLS_DINPUT_DINPUT_PRIVATE_H */ diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 745ab7f4afc..ef66ed99b51 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -287,36 +287,6 @@ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceState( return DI_OK; } -static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface); - -static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) -{ - SysKeyboardImpl *This = (SysKeyboardImpl *)iface; - HRESULT res; - - TRACE("(%p)\n",This); - - if ((res = IDirectInputDevice2AImpl_Acquire(iface)) != DI_OK) return res; - - set_dinput_hook(WH_KEYBOARD_LL, KeyboardCallback); - - return DI_OK; -} - -static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) -{ - SysKeyboardImpl *This = (SysKeyboardImpl *)iface; - HRESULT res; - - TRACE("(this=%p)\n",This); - - if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; - - set_dinput_hook(WH_KEYBOARD_LL, NULL); - - return DI_OK; -} - /****************************************************************************** * GetCapabilities : get the device capablitites */ @@ -442,8 +412,8 @@ static const IDirectInputDevice8AVtbl SysKeyboardAvt = IDirectInputDevice2AImpl_EnumObjects, IDirectInputDevice2AImpl_GetProperty, IDirectInputDevice2AImpl_SetProperty, - SysKeyboardAImpl_Acquire, - SysKeyboardAImpl_Unacquire, + IDirectInputDevice2AImpl_Acquire, + IDirectInputDevice2AImpl_Unacquire, SysKeyboardAImpl_GetDeviceState, IDirectInputDevice2AImpl_GetDeviceData, IDirectInputDevice2AImpl_SetDataFormat, @@ -484,8 +454,8 @@ static const IDirectInputDevice8WVtbl SysKeyboardWvt = IDirectInputDevice2WImpl_EnumObjects, XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty, XCAST(SetProperty)IDirectInputDevice2AImpl_SetProperty, - XCAST(Acquire)SysKeyboardAImpl_Acquire, - XCAST(Unacquire)SysKeyboardAImpl_Unacquire, + XCAST(Acquire)IDirectInputDevice2AImpl_Acquire, + XCAST(Unacquire)IDirectInputDevice2AImpl_Unacquire, XCAST(GetDeviceState)SysKeyboardAImpl_GetDeviceState, XCAST(GetDeviceData)IDirectInputDevice2AImpl_GetDeviceData, XCAST(SetDataFormat)IDirectInputDevice2AImpl_SetDataFormat, diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 0e9a349d199..eeada113153 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -398,7 +398,6 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) /* Install our mouse hook */ if (This->base.dwCoopLevel & DISCL_EXCLUSIVE) ShowCursor(FALSE); /* hide cursor */ - set_dinput_hook(WH_MOUSE_LL, dinput_mouse_hook); /* Get the window dimension and find the center */ GetWindowRect(This->base.win, &rect); @@ -433,7 +432,6 @@ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) if ((res = IDirectInputDevice2AImpl_Unacquire(iface)) != DI_OK) return res; - set_dinput_hook(WH_MOUSE_LL, NULL); if (This->base.dwCoopLevel & DISCL_EXCLUSIVE) ShowCursor(TRUE); /* show cursor */