Module: wine Branch: master Commit: 3d30db22484c119d65e1fa476662bd6a4a3eea21 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d30db22484c119d65e1fa4766...
Author: Aric Stewart aric@codeweavers.com Date: Tue Apr 7 10:00:31 2015 -0500
dinput: Add JoystickID to the Instance Name.
---
dlls/dinput/joystick.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c index 547ba56..9425c0b 100644 --- a/dlls/dinput/joystick.c +++ b/dlls/dinput/joystick.c @@ -26,6 +26,8 @@ * force feedback */
+#include <stdio.h> + #include "joystick_private.h" #include "wine/debug.h" #include "winreg.h" @@ -608,6 +610,8 @@ HRESULT WINAPI JoystickAGenericImpl_GetDeviceInfo( LPDIDEVICEINSTANCEA pdidi) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); + DIPROPDWORD pd; + DWORD index = 0;
TRACE("(%p,%p)\n", iface, pdidi);
@@ -622,12 +626,20 @@ HRESULT WINAPI JoystickAGenericImpl_GetDeviceInfo( return DIERR_INVALIDPARAM; }
+ /* Try to get joystick index */ + pd.diph.dwSize = sizeof(pd); + pd.diph.dwHeaderSize = sizeof(pd.diph); + pd.diph.dwObj = 0; + pd.diph.dwHow = DIPH_DEVICE; + if (SUCCEEDED(IDirectInputDevice2_GetProperty(iface, DIPROP_JOYSTICKID, &pd.diph))) + index = pd.dwData; + /* Return joystick */ pdidi->guidInstance = This->guidInstance; pdidi->guidProduct = This->guidProduct; /* we only support traditional joysticks for now */ pdidi->dwDevType = This->devcaps.dwDevType; - strcpy(pdidi->tszInstanceName, "Joystick"); + snprintf(pdidi->tszInstanceName, MAX_PATH, "Joystick %d", index); strcpy(pdidi->tszProductName, This->name); if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3A)) { pdidi->guidFFDriver = GUID_NULL; @@ -646,6 +658,9 @@ HRESULT WINAPI JoystickWGenericImpl_GetDeviceInfo( LPDIDEVICEINSTANCEW pdidi) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface); + CHAR buffer[MAX_PATH]; + DIPROPDWORD pd; + DWORD index = 0;
TRACE("(%p,%p)\n", iface, pdidi);
@@ -655,12 +670,21 @@ HRESULT WINAPI JoystickWGenericImpl_GetDeviceInfo( return DIERR_INVALIDPARAM; }
+ /* Try to get joystick index */ + pd.diph.dwSize = sizeof(pd); + pd.diph.dwHeaderSize = sizeof(pd.diph); + pd.diph.dwObj = 0; + pd.diph.dwHow = DIPH_DEVICE; + if (SUCCEEDED(IDirectInputDevice2_GetProperty(iface, DIPROP_JOYSTICKID, &pd.diph))) + index = pd.dwData; + /* Return joystick */ pdidi->guidInstance = This->guidInstance; pdidi->guidProduct = This->guidProduct; /* we only support traditional joysticks for now */ pdidi->dwDevType = This->devcaps.dwDevType; - MultiByteToWideChar(CP_ACP, 0, "Joystick", -1, pdidi->tszInstanceName, MAX_PATH); + snprintf(buffer, sizeof(buffer), "Joystick %d", index); + MultiByteToWideChar(CP_ACP, 0, buffer, -1, pdidi->tszInstanceName, MAX_PATH); MultiByteToWideChar(CP_ACP, 0, This->name, -1, pdidi->tszProductName, MAX_PATH); if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3W)) { pdidi->guidFFDriver = GUID_NULL;