From: Rémi Bernon rbernon@codeweavers.com
--- dlls/windows.gaming.input/controller.c | 6 +++--- dlls/windows.gaming.input/provider.c | 13 +++++++++++++ dlls/windows.gaming.input/provider.idl | 1 + 3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/windows.gaming.input/controller.c b/dlls/windows.gaming.input/controller.c index 2276b9e947e..7e7b570d7f6 100644 --- a/dlls/windows.gaming.input/controller.c +++ b/dlls/windows.gaming.input/controller.c @@ -368,10 +368,10 @@ static HRESULT WINAPI raw_controller_2_get_NonRoamableId( IRawGameController2 *i return IWineGameControllerProvider_get_NonRoamableId( impl->wine_provider, value ); }
-static HRESULT WINAPI raw_controller_2_get_DisplayName( IRawGameController2 *iface, HSTRING* value ) +static HRESULT WINAPI raw_controller_2_get_DisplayName( IRawGameController2 *iface, HSTRING *value ) { - FIXME( "iface %p, value %p stub!\n", iface, value ); - return E_NOTIMPL; + struct controller *impl = impl_from_IRawGameController2( iface ); + return IWineGameControllerProvider_get_DisplayName( impl->wine_provider, value ); }
static const struct IRawGameController2Vtbl raw_controller_2_vtbl = diff --git a/dlls/windows.gaming.input/provider.c b/dlls/windows.gaming.input/provider.c index 4bedde992a7..69737dbafbd 100644 --- a/dlls/windows.gaming.input/provider.c +++ b/dlls/windows.gaming.input/provider.c @@ -147,6 +147,18 @@ static HRESULT WINAPI wine_provider_get_NonRoamableId( IWineGameControllerProvid return E_NOTIMPL; }
+static HRESULT WINAPI wine_provider_get_DisplayName( IWineGameControllerProvider *iface, HSTRING *value ) +{ + struct provider *impl = impl_from_IWineGameControllerProvider( iface ); + DIDEVICEINSTANCEW instance = {.dwSize = sizeof(DIDEVICEINSTANCEW)}; + HRESULT hr; + + TRACE( "iface %p, value %p\n", iface, value ); + + if (FAILED(hr = IDirectInputDevice8_GetDeviceInfo( impl->dinput_device, &instance ))) return hr; + return WindowsCreateString( instance.tszProductName, wcslen( instance.tszProductName ), value ); +} + static BOOL CALLBACK count_ffb_axes( const DIDEVICEOBJECTINSTANCEW *obj, void *args ) { DWORD *count = args; @@ -361,6 +373,7 @@ static const struct IWineGameControllerProviderVtbl wine_provider_vtbl = wine_provider_GetTrustLevel, /* IWineGameControllerProvider methods */ wine_provider_get_NonRoamableId, + wine_provider_get_DisplayName, wine_provider_get_Type, wine_provider_get_AxisCount, wine_provider_get_ButtonCount, diff --git a/dlls/windows.gaming.input/provider.idl b/dlls/windows.gaming.input/provider.idl index 54f848e51d4..1d8134dff32 100644 --- a/dlls/windows.gaming.input/provider.idl +++ b/dlls/windows.gaming.input/provider.idl @@ -170,6 +170,7 @@ namespace Windows.Gaming.Input.Custom { requires Windows.Gaming.Input.Custom.IGameControllerProvider { [propget] HRESULT NonRoamableId([out, retval] HSTRING *value); + [propget] HRESULT DisplayName([out, retval] HSTRING *value);
[propget] HRESULT Type([out, retval] WineGameControllerType *value); [propget] HRESULT AxisCount([out, retval] INT32 *value);