From 8f28d4369e04af31d87faea1e05e2118b4fd21ba Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Fri, 6 Jul 2007 23:36:39 -0600 Subject: [PATCH] dinput: Rename set_dinput_hook and call it from the base class. Since keyboard's acquire and unacquire don't do anything special just call the base class. --- dlls/dinput/device.c | 5 +++++ dlls/dinput/dinput_main.c | 4 ++-- dlls/dinput/dinput_private.h | 2 +- dlls/dinput/keyboard.c | 38 ++++-------------------------------- dlls/dinput/mouse.c | 2 -- 5 files changed, 12 insertions(+), 39 deletions(-) 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 */