Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/device.c | 18 +++++++++++------- dlls/dinput/device_private.h | 1 + dlls/dinput/joystick_hid.c | 13 ++++--------- dlls/dinput/keyboard.c | 1 + dlls/dinput/mouse.c | 1 + 5 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index e5713f4713d..ce163660e6c 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -1732,14 +1732,18 @@ HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects( IDirectInputDevice8W *iface return DI_OK; }
-HRESULT WINAPI IDirectInputDevice2WImpl_GetEffectInfo( - LPDIRECTINPUTDEVICE8W iface, - LPDIEFFECTINFOW lpdei, - REFGUID rguid) +HRESULT WINAPI IDirectInputDevice2WImpl_GetEffectInfo( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, + const GUID *guid ) { - IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8W(iface); - FIXME("(%p)->(%p,%s): stub!\n", This, lpdei, debugstr_guid(rguid)); - return DI_OK; + IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8W( iface ); + + TRACE( "iface %p, info %p, guid %s.\n", iface, info, debugstr_guid( guid ) ); + + if (!info) return E_POINTER; + if (info->dwSize != sizeof(DIEFFECTINFOW)) return DIERR_INVALIDPARAM; + if (!(impl->caps.dwFlags & DIDC_FORCEFEEDBACK)) return DIERR_DEVICENOTREG; + if (!impl->vtbl->get_effect_info) return DIERR_UNSUPPORTED; + return impl->vtbl->get_effect_info( iface, info, guid ); }
HRESULT WINAPI IDirectInputDevice2WImpl_GetForceFeedbackState(LPDIRECTINPUTDEVICE8W iface, LPDWORD pdwOut) diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h index bdac5b4a378..0b5919c7ec6 100644 --- a/dlls/dinput/device_private.h +++ b/dlls/dinput/device_private.h @@ -68,6 +68,7 @@ struct dinput_device_vtbl DIDEVICEOBJECTINSTANCEW *instance ); HRESULT (*set_property)( IDirectInputDevice8W *iface, DWORD property, const DIPROPHEADER *header, const DIDEVICEOBJECTINSTANCEW *instance ); + HRESULT (*get_effect_info)( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, const GUID *guid ); };
#define DEVICE_STATE_MAX_SIZE 1024 diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 91b6020d1f1..1e1f8c05e3f 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -838,8 +838,8 @@ failed: return hr; }
-static HRESULT WINAPI hid_joystick_GetEffectInfo( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, - const GUID *guid ) +static HRESULT hid_joystick_internal_get_effect_info( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, + const GUID *guid ) { struct hid_joystick *impl = impl_from_IDirectInputDevice8W( iface ); struct pid_effect_update *effect_update = &impl->pid_effect_update; @@ -853,12 +853,6 @@ static HRESULT WINAPI hid_joystick_GetEffectInfo( IDirectInputDevice8W *iface, D USAGE usage = 0; USHORT count;
- TRACE( "iface %p, info %p, guid %s.\n", iface, info, debugstr_guid( guid ) ); - - if (!info) return E_POINTER; - if (info->dwSize != sizeof(DIEFFECTINFOW)) return DIERR_INVALIDPARAM; - if (!(impl->base.caps.dwFlags & DIDC_FORCEFEEDBACK)) return DIERR_DEVICENOTREG; - switch ((usage = effect_guid_to_usage( guid ))) { case PID_USAGE_ET_SQUARE: @@ -1085,7 +1079,7 @@ static const IDirectInputDevice8WVtbl hid_joystick_vtbl = /*** IDirectInputDevice2 methods ***/ hid_joystick_CreateEffect, IDirectInputDevice2WImpl_EnumEffects, - hid_joystick_GetEffectInfo, + IDirectInputDevice2WImpl_GetEffectInfo, hid_joystick_GetForceFeedbackState, hid_joystick_SendForceFeedbackCommand, hid_joystick_EnumCreatedEffectObjects, @@ -1326,6 +1320,7 @@ static const struct dinput_device_vtbl hid_joystick_internal_vtbl = hid_joystick_internal_enum_objects, hid_joystick_internal_get_property, hid_joystick_internal_set_property, + hid_joystick_internal_get_effect_info, };
static DWORD device_type_for_version( DWORD type, DWORD version ) diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index f17dc89ac16..1127ec2aaea 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -338,6 +338,7 @@ static const struct dinput_device_vtbl keyboard_internal_vtbl = keyboard_internal_enum_objects, keyboard_internal_get_property, keyboard_internal_set_property, + NULL, };
static const IDirectInputDevice8WVtbl SysKeyboardWvt = diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 7fafa7696a7..69348ad2c7f 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -651,6 +651,7 @@ static const struct dinput_device_vtbl mouse_internal_vtbl = mouse_internal_enum_objects, mouse_internal_get_property, mouse_internal_set_property, + NULL, };
static const IDirectInputDevice8WVtbl SysMouseWvt =