Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/device.c | 18 +++++++++++++----- dlls/dinput/device_private.h | 2 ++ dlls/dinput/joystick_hid.c | 12 +++++------- dlls/dinput/keyboard.c | 1 + dlls/dinput/mouse.c | 1 + 5 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index b8da627b1ea..d9b92e82271 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -1799,12 +1799,20 @@ HRESULT WINAPI IDirectInputDevice2WImpl_SendForceFeedbackCommand( IDirectInputDe return hr; }
-HRESULT WINAPI IDirectInputDevice2WImpl_EnumCreatedEffectObjects(LPDIRECTINPUTDEVICE8W iface, - LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID lpvRef, DWORD dwFlags) +HRESULT WINAPI IDirectInputDevice2WImpl_EnumCreatedEffectObjects( IDirectInputDevice8W *iface, + LPDIENUMCREATEDEFFECTOBJECTSCALLBACK callback, + void *context, DWORD flags ) { - IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8W(iface); - FIXME("(%p)0>(%p,%p,0x%08x): stub!\n", This, lpCallback, lpvRef, dwFlags); - return DI_OK; + IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8W( iface ); + + TRACE( "iface %p, callback %p, context %p, flags %#x.\n", iface, callback, context, flags ); + + if (!callback) return DIERR_INVALIDPARAM; + if (flags) return DIERR_INVALIDPARAM; + if (!(impl->caps.dwFlags & DIDC_FORCEFEEDBACK)) return DI_OK; + if (!impl->vtbl->enum_created_effect_objects) return DIERR_UNSUPPORTED; + + return impl->vtbl->enum_created_effect_objects( iface, callback, context, flags ); }
HRESULT WINAPI IDirectInputDevice2WImpl_Escape(LPDIRECTINPUTDEVICE8W iface, LPDIEFFESCAPE lpDIEEsc) diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h index b90c6bf2dcd..16d28323281 100644 --- a/dlls/dinput/device_private.h +++ b/dlls/dinput/device_private.h @@ -71,6 +71,8 @@ struct dinput_device_vtbl HRESULT (*get_effect_info)( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, const GUID *guid ); HRESULT (*create_effect)( IDirectInputDevice8W *iface, IDirectInputEffect **out ); HRESULT (*send_force_feedback_command)( IDirectInputDevice8W *iface, DWORD command ); + HRESULT (*enum_created_effect_objects)( IDirectInputDevice8W *iface, LPDIENUMCREATEDEFFECTOBJECTSCALLBACK callback, + void *context, DWORD flags ); };
#define DEVICE_STATE_MAX_SIZE 1024 diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index e9bbfa081e8..5fb4e9a2de9 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -982,18 +982,15 @@ static HRESULT hid_joystick_internal_send_force_feedback_command( IDirectInputDe return DI_OK; }
-static HRESULT WINAPI hid_joystick_EnumCreatedEffectObjects( IDirectInputDevice8W *iface, - LPDIENUMCREATEDEFFECTOBJECTSCALLBACK callback, - void *context, DWORD flags ) +static HRESULT hid_joystick_internal_enum_created_effect_objects( IDirectInputDevice8W *iface, + LPDIENUMCREATEDEFFECTOBJECTSCALLBACK callback, + void *context, DWORD flags ) { struct hid_joystick *impl = impl_from_IDirectInputDevice8W( iface ); struct hid_joystick_effect *effect, *next;
TRACE( "iface %p, callback %p, context %p, flags %#x.\n", iface, callback, context, flags );
- if (!callback) return DIERR_INVALIDPARAM; - if (flags) return DIERR_INVALIDPARAM; - LIST_FOR_EACH_ENTRY_SAFE(effect, next, &impl->effect_list, struct hid_joystick_effect, entry) if (callback( &effect->IDirectInputEffect_iface, context ) != DIENUM_CONTINUE) break;
@@ -1028,7 +1025,7 @@ static const IDirectInputDevice8WVtbl hid_joystick_vtbl = IDirectInputDevice2WImpl_GetEffectInfo, IDirectInputDevice2WImpl_GetForceFeedbackState, IDirectInputDevice2WImpl_SendForceFeedbackCommand, - hid_joystick_EnumCreatedEffectObjects, + IDirectInputDevice2WImpl_EnumCreatedEffectObjects, IDirectInputDevice2WImpl_Escape, IDirectInputDevice2WImpl_Poll, IDirectInputDevice2WImpl_SendDeviceData, @@ -1269,6 +1266,7 @@ static const struct dinput_device_vtbl hid_joystick_internal_vtbl = hid_joystick_internal_get_effect_info, hid_joystick_internal_create_effect, hid_joystick_internal_send_force_feedback_command, + hid_joystick_internal_enum_created_effect_objects, };
static DWORD device_type_for_version( DWORD type, DWORD version ) diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index a04b59e9c0c..fb6cf33b911 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -341,6 +341,7 @@ static const struct dinput_device_vtbl keyboard_internal_vtbl = NULL, NULL, NULL, + NULL, };
static const IDirectInputDevice8WVtbl SysKeyboardWvt = diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index faf093489cf..1b91fa12189 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -654,6 +654,7 @@ static const struct dinput_device_vtbl mouse_internal_vtbl = NULL, NULL, NULL, + NULL, };
static const IDirectInputDevice8WVtbl SysMouseWvt =