Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 95 +++++++++------------------------------ 1 file changed, 20 insertions(+), 75 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 985dae1ab36..da790bae36c 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -270,58 +270,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH DirectInputCreateW(HINSTANCE hinst, DWORD dwVer return DirectInputCreateEx(hinst, dwVersion, &IID_IDirectInput7W, (LPVOID *)ppDI, punkOuter); }
-static const char *_dump_DIDEVTYPE_value(DWORD dwDevType, DWORD dwVersion) -{ - if (dwVersion < 0x0800) { - switch (dwDevType) { - case 0: return "All devices"; - case DIDEVTYPE_MOUSE: return "DIDEVTYPE_MOUSE"; - case DIDEVTYPE_KEYBOARD: return "DIDEVTYPE_KEYBOARD"; - case DIDEVTYPE_JOYSTICK: return "DIDEVTYPE_JOYSTICK"; - case DIDEVTYPE_DEVICE: return "DIDEVTYPE_DEVICE"; - default: return "Unknown"; - } - } else { - switch (dwDevType) { - case DI8DEVCLASS_ALL: return "All devices"; - case DI8DEVCLASS_POINTER: return "DI8DEVCLASS_POINTER"; - case DI8DEVCLASS_KEYBOARD: return "DI8DEVCLASS_KEYBOARD"; - case DI8DEVCLASS_DEVICE: return "DI8DEVCLASS_DEVICE"; - case DI8DEVCLASS_GAMECTRL: return "DI8DEVCLASS_GAMECTRL"; - default: return "Unknown"; - } - } -} - -static void _dump_EnumDevices_dwFlags(DWORD dwFlags) -{ - if (TRACE_ON(dinput)) { - unsigned int i; - static const struct { - DWORD mask; - const char *name; - } flags[] = { -#define FE(x) { x, #x} - FE(DIEDFL_ALLDEVICES), - FE(DIEDFL_ATTACHEDONLY), - FE(DIEDFL_FORCEFEEDBACK), - FE(DIEDFL_INCLUDEALIASES), - FE(DIEDFL_INCLUDEPHANTOMS), - FE(DIEDFL_INCLUDEHIDDEN) -#undef FE - }; - TRACE(" flags: "); - if (dwFlags == 0) { - TRACE("DIEDFL_ALLDEVICES\n"); - return; - } - for (i = 0; i < ARRAY_SIZE(flags); i++) - if (flags[i].mask & dwFlags) - TRACE("%s ",flags[i].name); - } - TRACE("\n"); -} - static DWORD diactionformat_priorityW(LPDIACTIONFORMATW lpdiaf, DWORD genre) { int i; @@ -371,38 +319,35 @@ __ASM_GLOBAL_FUNC( enum_callback_wrapper, /****************************************************************************** * IDirectInputW_EnumDevices */ -static HRESULT WINAPI IDirectInputWImpl_EnumDevices( - LPDIRECTINPUT7W iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, - LPVOID pvRef, DWORD dwFlags) +static HRESULT WINAPI IDirectInputWImpl_EnumDevices( IDirectInput7W *iface, DWORD type, LPDIENUMDEVICESCALLBACKW callback, + void *context, DWORD flags ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - DIDEVICEINSTANCEW devInstance; - unsigned int i; - int j; - HRESULT r; + DIDEVICEINSTANCEW instance = {.dwSize = sizeof(DIDEVICEINSTANCEW)}; + IDirectInputImpl *impl = impl_from_IDirectInput7W( iface ); + unsigned int i, j; + HRESULT hr;
- TRACE("(this=%p,0x%04x '%s',%p,%p,0x%04x)\n", - This, dwDevType, _dump_DIDEVTYPE_value(dwDevType, This->dwVersion), - lpCallback, pvRef, dwFlags); - _dump_EnumDevices_dwFlags(dwFlags); + TRACE( "iface %p, type %#x, callback %p, context %p, flags %#x\n", iface, type, callback, context, flags );
- if (!lpCallback || - dwFlags & ~(DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK | DIEDFL_INCLUDEALIASES | DIEDFL_INCLUDEPHANTOMS | DIEDFL_INCLUDEHIDDEN) || - (dwDevType > DI8DEVCLASS_GAMECTRL && dwDevType < DI8DEVTYPE_DEVICE) || dwDevType > DI8DEVTYPE_SUPPLEMENTAL) + if (!callback) return DIERR_INVALIDPARAM; + + if ((type > DI8DEVCLASS_GAMECTRL && type < DI8DEVTYPE_DEVICE) || type > DI8DEVTYPE_SUPPLEMENTAL) + return DIERR_INVALIDPARAM; + if (flags & ~(DIEDFL_ATTACHEDONLY|DIEDFL_FORCEFEEDBACK|DIEDFL_INCLUDEALIASES|DIEDFL_INCLUDEPHANTOMS|DIEDFL_INCLUDEHIDDEN)) return DIERR_INVALIDPARAM;
- if (!This->initialized) + if (!impl->initialized) return DIERR_NOTINITIALIZED;
- for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) { + for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) + { if (!dinput_devices[i]->enum_device) continue; - for (j = 0, r = S_OK; SUCCEEDED(r); j++) { - devInstance.dwSize = sizeof(devInstance); + for (j = 0, hr = S_OK; SUCCEEDED(hr); j++) + { TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name); - r = dinput_devices[i]->enum_device(dwDevType, dwFlags, &devInstance, This->dwVersion, j); - if (r == S_OK) - if (enum_callback_wrapper(lpCallback, &devInstance, pvRef) == DIENUM_STOP) - return S_OK; + hr = dinput_devices[i]->enum_device( type, flags, &instance, impl->dwVersion, j ); + if (hr != S_OK) continue; + if (enum_callback_wrapper( callback, &instance, context ) == DIENUM_STOP) return S_OK; } }
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 25 ++++++++++++++----------- dlls/dinput/dinput_private.h | 4 ++++ dlls/dinput/joystick_hid.c | 3 +-- dlls/dinput/keyboard.c | 2 +- dlls/dinput/mouse.c | 2 +- 5 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index da790bae36c..27fd7fa7364 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -324,7 +324,7 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices( IDirectInput7W *iface, DWOR { DIDEVICEINSTANCEW instance = {.dwSize = sizeof(DIDEVICEINSTANCEW)}; IDirectInputImpl *impl = impl_from_IDirectInput7W( iface ); - unsigned int i, j; + unsigned int i = 0; HRESULT hr;
TRACE( "iface %p, type %#x, callback %p, context %p, flags %#x\n", iface, type, callback, context, flags ); @@ -339,19 +339,22 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices( IDirectInput7W *iface, DWOR if (!impl->initialized) return DIERR_NOTINITIALIZED;
- for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) + hr = mouse_enum_device( type, flags, &instance, impl->dwVersion, 0 ); + if (hr == DI_OK && enum_callback_wrapper( callback, &instance, context ) == DIENUM_STOP) + return DI_OK; + hr = keyboard_enum_device( type, flags, &instance, impl->dwVersion, 0 ); + if (hr == DI_OK && enum_callback_wrapper( callback, &instance, context ) == DIENUM_STOP) + return DI_OK; + + do { - if (!dinput_devices[i]->enum_device) continue; - for (j = 0, hr = S_OK; SUCCEEDED(hr); j++) - { - TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name); - hr = dinput_devices[i]->enum_device( type, flags, &instance, impl->dwVersion, j ); - if (hr != S_OK) continue; - if (enum_callback_wrapper( callback, &instance, context ) == DIENUM_STOP) return S_OK; - } + hr = hid_joystick_enum_device( type, flags, &instance, impl->dwVersion, i++ ); + if (hr == DI_OK && enum_callback_wrapper( callback, &instance, context ) == DIENUM_STOP) + return DI_OK; } + while (SUCCEEDED(hr));
- return S_OK; + return DI_OK; }
static ULONG WINAPI IDirectInputWImpl_AddRef( IDirectInput7W *iface ) diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h index 949e84957d0..553906e705d 100644 --- a/dlls/dinput/dinput_private.h +++ b/dlls/dinput/dinput_private.h @@ -59,6 +59,10 @@ struct dinput_device { HRESULT (*create_device)(IDirectInputImpl *dinput, REFGUID rguid, IDirectInputDevice8W **out); };
+extern HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); +extern HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); +extern HRESULT hid_joystick_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); + struct DevicePlayer { GUID instance_guid; WCHAR username[MAX_PATH]; diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 2bd527e7000..8ce55e67ef2 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -1450,8 +1450,7 @@ static HRESULT hid_joystick_device_open( int index, DIDEVICEINSTANCEW *filter, W return DI_OK; }
-static HRESULT hid_joystick_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, - DWORD version, int index ) +HRESULT hid_joystick_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ) { HIDD_ATTRIBUTES attrs = {.Size = sizeof(attrs)}; PHIDP_PREPARSED_DATA preparsed; diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 35e55be4f4b..4a3deb161f1 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -144,7 +144,7 @@ static DWORD get_keyboard_subtype(void) return dev_subtype; }
-static HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ) +HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ) { BYTE subtype = get_keyboard_subtype(); DWORD size; diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index d871722e0a9..b120966717e 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -75,7 +75,7 @@ static inline SysMouseImpl *impl_from_IDirectInputDevice8W(IDirectInputDevice8W return CONTAINING_RECORD(CONTAINING_RECORD(iface, IDirectInputDeviceImpl, IDirectInputDevice8W_iface), SysMouseImpl, base); }
-static HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ) +HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ) { DWORD size;
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 27fd7fa7364..bee919cebff 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -605,38 +605,36 @@ static HRESULT WINAPI IDirectInput2WImpl_FindDevice(LPDIRECTINPUT7W iface, REFGU return DI_OK; }
-static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx( IDirectInput7W *iface, REFGUID rguid, REFIID riid, - LPVOID *pvOut, LPUNKNOWN lpUnknownOuter ) +static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx( IDirectInput7W *iface, const GUID *guid, + const GUID *iid, void **out, IUnknown *outer ) { + IDirectInputImpl *impl = impl_from_IDirectInput7W( iface ); IDirectInputDevice8W *device; - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); unsigned int i; HRESULT hr;
- TRACE( "(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid( rguid ), debugstr_guid( riid ), pvOut, lpUnknownOuter ); - - if (pvOut) - *pvOut = NULL; + TRACE( "iface %p, guid %s, iid %s, out %p, outer %p\n", iface, debugstr_guid( guid ), + debugstr_guid( iid ), out, outer );
- if (!rguid || !pvOut) - return E_POINTER; + if (!out) return E_POINTER; + *out = NULL;
- if (!This->initialized) - return DIERR_NOTINITIALIZED; + if (!guid) return E_POINTER; + if (!impl->initialized) return DIERR_NOTINITIALIZED;
/* Loop on all the devices to see if anyone matches the given GUID */ for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) { if (!dinput_devices[i]->create_device) continue; - if (SUCCEEDED(hr = dinput_devices[i]->create_device( This, rguid, &device ))) + if (SUCCEEDED(hr = dinput_devices[i]->create_device( impl, guid, &device ))) { - hr = IDirectInputDevice8_QueryInterface( device, riid, pvOut ); + hr = IDirectInputDevice8_QueryInterface( device, iid, out ); IDirectInputDevice8_Release( device ); return hr; } }
- WARN("invalid device GUID %s\n", debugstr_guid(rguid)); + WARN( "invalid device GUID %s\n", debugstr_guid( guid ) ); return DIERR_DEVICENOTREG; }
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 21 +++++++-------------- dlls/dinput/dinput_private.h | 3 +++ dlls/dinput/joystick_hid.c | 2 +- dlls/dinput/keyboard.c | 2 +- dlls/dinput/mouse.c | 2 +- 5 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index bee919cebff..ffa78be2fb5 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -610,7 +610,6 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx( IDirectInput7W *iface, { IDirectInputImpl *impl = impl_from_IDirectInput7W( iface ); IDirectInputDevice8W *device; - unsigned int i; HRESULT hr;
TRACE( "iface %p, guid %s, iid %s, out %p, outer %p\n", iface, debugstr_guid( guid ), @@ -622,20 +621,14 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx( IDirectInput7W *iface, if (!guid) return E_POINTER; if (!impl->initialized) return DIERR_NOTINITIALIZED;
- /* Loop on all the devices to see if anyone matches the given GUID */ - for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) - { - if (!dinput_devices[i]->create_device) continue; - if (SUCCEEDED(hr = dinput_devices[i]->create_device( impl, guid, &device ))) - { - hr = IDirectInputDevice8_QueryInterface( device, iid, out ); - IDirectInputDevice8_Release( device ); - return hr; - } - } + if (IsEqualGUID( &GUID_SysKeyboard, guid )) hr = keyboard_create_device( impl, guid, &device ); + else if (IsEqualGUID( &GUID_SysMouse, guid )) hr = mouse_create_device( impl, guid, &device ); + else hr = hid_joystick_create_device( impl, guid, &device );
- WARN( "invalid device GUID %s\n", debugstr_guid( guid ) ); - return DIERR_DEVICENOTREG; + if (FAILED(hr)) return hr; + hr = IDirectInputDevice8_QueryInterface( device, iid, out ); + IDirectInputDevice8_Release( device ); + return hr; }
static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7W iface, REFGUID rguid, diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h index 553906e705d..e9b40bb95b6 100644 --- a/dlls/dinput/dinput_private.h +++ b/dlls/dinput/dinput_private.h @@ -60,8 +60,11 @@ struct dinput_device { };
extern HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); +extern HRESULT mouse_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ); extern HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); +extern HRESULT keyboard_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ); extern HRESULT hid_joystick_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); +extern HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out );
struct DevicePlayer { GUID instance_guid; diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 8ce55e67ef2..3419fed7d79 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -1737,7 +1737,7 @@ static BOOL init_pid_caps( struct hid_joystick *impl, struct hid_value_caps *cap return DIENUM_CONTINUE; }
-static HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) +HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) { static const DIPROPHEADER filter = { diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 4a3deb161f1..3b8f52b38f2 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -174,7 +174,7 @@ HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instan return DI_OK; }
-static HRESULT keyboard_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) +HRESULT keyboard_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) { SysKeyboardImpl *impl; HRESULT hr; diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index b120966717e..325d38c90d3 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -104,7 +104,7 @@ HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, return DI_OK; }
-static HRESULT mouse_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) +HRESULT mouse_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ) { SysMouseImpl *impl; HKEY hkey, appkey;
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index ffa78be2fb5..745fdafa920 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -762,7 +762,8 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics( DIDEVICEINSTANCEW didevi; LPDIRECTINPUTDEVICE8W lpdid; DWORD callbackFlags; - int i, j; + unsigned int i = 0; + HRESULT hr; int device_count = 0; int remain; DIDEVICEINSTANCEW *didevis = 0; @@ -772,28 +773,17 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
didevi.dwSize = sizeof(didevi);
- /* Enumerate all the joysticks */ - for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) + do { - HRESULT enumSuccess; - - if (!dinput_devices[i]->enum_device) continue; - - for (j = 0, enumSuccess = S_OK; SUCCEEDED(enumSuccess); j++) + hr = hid_joystick_enum_device( DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, i++ ); + if (hr != DI_OK) continue; + if (should_enumerate_device( ptszUserName, dwFlags, &This->device_players, &didevi.guidInstance )) { - TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name); - - /* Default behavior is to enumerate attached game controllers */ - enumSuccess = dinput_devices[i]->enum_device(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, &didevi, This->dwVersion, j); - if (enumSuccess == S_OK && - should_enumerate_device(ptszUserName, dwFlags, &This->device_players, &didevi.guidInstance)) - { - device_count++; - didevis = realloc( didevis, sizeof(DIDEVICEINSTANCEW) * device_count ); - didevis[device_count-1] = didevi; - } + device_count++; + didevis = realloc( didevis, sizeof(DIDEVICEINSTANCEW) * device_count ); + didevis[device_count - 1] = didevi; } - } + } while (SUCCEEDED(hr));
remain = device_count; /* Add keyboard and mouse to remaining device count */
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 41 +++++++++--------------------------- dlls/dinput/dinput_private.h | 11 ---------- dlls/dinput/joystick_hid.c | 7 ------ dlls/dinput/keyboard.c | 6 ------ dlls/dinput/mouse.c | 6 ------ 5 files changed, 10 insertions(+), 61 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 745fdafa920..bc033a1baca 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -74,13 +74,6 @@ static inline IDirectInputDeviceImpl *impl_from_IDirectInputDevice8W(IDirectInpu return CONTAINING_RECORD(iface, IDirectInputDeviceImpl, IDirectInputDevice8W_iface); }
-static const struct dinput_device *dinput_devices[] = -{ - &mouse_device, - &keyboard_device, - &joystick_hid_device, -}; - HINSTANCE DINPUT_instance;
static HWND di_em_win; @@ -927,10 +920,11 @@ static HRESULT WINAPI JoyConfig8Impl_DeleteType(IDirectInputJoyConfig8 *iface, L
static HRESULT WINAPI JoyConfig8Impl_GetConfig(IDirectInputJoyConfig8 *iface, UINT id, LPDIJOYCONFIG info, DWORD flags) { + DIDEVICEINSTANCEW instance = {.dwSize = sizeof(DIDEVICEINSTANCEW)}; IDirectInputImpl *di = impl_from_IDirectInputJoyConfig8(iface); + unsigned int i = 0; UINT found = 0; - int i, j; - HRESULT r; + HRESULT hr;
FIXME("(%p)->(%d, %p, 0x%08x): semi-stub!\n", iface, id, info, flags);
@@ -941,29 +935,14 @@ static HRESULT WINAPI JoyConfig8Impl_GetConfig(IDirectInputJoyConfig8 *iface, UI X(DIJC_CALLOUT) #undef X
- /* Enumerate all joysticks in order */ - for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) + do { - if (!dinput_devices[i]->enum_device) continue; - - for (j = 0, r = S_OK; SUCCEEDED(r); j++) - { - DIDEVICEINSTANCEW dev; - dev.dwSize = sizeof(dev); - if ((r = dinput_devices[i]->enum_device(DI8DEVCLASS_GAMECTRL, 0, &dev, di->dwVersion, j)) == S_OK) - { - /* Only take into account the chosen id */ - if (found == id) - { - if (flags & DIJC_GUIDINSTANCE) - info->guidInstance = dev.guidInstance; - - return DI_OK; - } - found += 1; - } - } - } + hr = hid_joystick_enum_device( DI8DEVCLASS_GAMECTRL, 0, &instance, di->dwVersion, i++ ); + if (hr != DI_OK) continue; + if (flags & DIJC_GUIDINSTANCE) info->guidInstance = instance.guidInstance; + /* Only take into account the chosen id */ + if (found++ == id) return DI_OK; + } while (SUCCEEDED(hr));
return DIERR_NOMOREITEMS; } diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h index e9b40bb95b6..461af021a30 100644 --- a/dlls/dinput/dinput_private.h +++ b/dlls/dinput/dinput_private.h @@ -52,13 +52,6 @@ struct IDirectInputImpl extern const IDirectInput7AVtbl dinput7_a_vtbl DECLSPEC_HIDDEN; extern const IDirectInput8AVtbl dinput8_a_vtbl DECLSPEC_HIDDEN;
-/* Function called by all devices that Wine supports */ -struct dinput_device { - const char *name; - HRESULT (*enum_device)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id); - HRESULT (*create_device)(IDirectInputImpl *dinput, REFGUID rguid, IDirectInputDevice8W **out); -}; - extern HRESULT mouse_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); extern HRESULT mouse_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirectInputDevice8W **out ); extern HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instance, DWORD version, int index ); @@ -72,10 +65,6 @@ struct DevicePlayer { struct list entry; };
-extern const struct dinput_device mouse_device DECLSPEC_HIDDEN; -extern const struct dinput_device keyboard_device DECLSPEC_HIDDEN; -extern const struct dinput_device joystick_hid_device DECLSPEC_HIDDEN; - extern void dinput_hooks_acquire_device(LPDIRECTINPUTDEVICE8W iface); extern void dinput_hooks_unacquire_device(LPDIRECTINPUTDEVICE8W iface); extern int dinput_mouse_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lparam ); diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 3419fed7d79..4632109a35b 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -1867,13 +1867,6 @@ failed: return hr; }
-const struct dinput_device joystick_hid_device = -{ - "Wine HID joystick driver", - hid_joystick_enum_device, - hid_joystick_create_device, -}; - static HRESULT WINAPI hid_joystick_effect_QueryInterface( IDirectInputEffect *iface, REFIID iid, void **out ) { TRACE( "iface %p, iid %s, out %p\n", iface, debugstr_guid( iid ), out ); diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 3b8f52b38f2..a6032cbd0a4 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -204,12 +204,6 @@ HRESULT keyboard_create_device( IDirectInputImpl *dinput, const GUID *guid, IDir return DI_OK; }
-const struct dinput_device keyboard_device = { - "Wine keyboard driver", - keyboard_enum_device, - keyboard_create_device -}; - static HRESULT keyboard_poll( IDirectInputDevice8W *iface ) { check_dinput_events(); diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 325d38c90d3..84b5410bb36 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -153,12 +153,6 @@ HRESULT mouse_create_device( IDirectInputImpl *dinput, const GUID *guid, IDirect return DI_OK; }
-const struct dinput_device mouse_device = { - "Wine mouse driver", - mouse_enum_device, - mouse_create_device -}; - /****************************************************************************** * SysMouseA (DInput Mouse support) */