[DINPUT] more test fixes

Robert Reif reif at earthlink.net
Sat May 14 13:33:43 CDT 2005


Pass around real version and do correct thing based on it.
Change cooperative level to pass on windows.
-------------- next part --------------
Index: dlls/dinput/dinput_main.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/dinput_main.c,v
retrieving revision 1.54
diff -u -p -r1.54 dinput_main.c
--- dlls/dinput/dinput_main.c	13 May 2005 13:57:17 -0000	1.54
+++ dlls/dinput/dinput_main.c	14 May 2005 18:24:03 -0000
@@ -94,7 +94,6 @@ HRESULT WINAPI DirectInputCreateEx(
 	  This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
 	  This->lpVtbl = &ddi7avt;
 	  This->ref = 1;
-	  This->version = 1;
 	  This->dwVersion = dwVersion; 
 	  *ppDI = This;
 
@@ -107,7 +106,6 @@ HRESULT WINAPI DirectInputCreateEx(
 	  This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
 	  This->lpVtbl = &ddi7wvt;
 	  This->ref = 1;
-	  This->version = 1;
 	  This->dwVersion = dwVersion; 
 	  *ppDI = This;
 
@@ -118,7 +116,6 @@ HRESULT WINAPI DirectInputCreateEx(
 	  This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
 	  This->lpVtbl = &ddi8avt;
 	  This->ref = 1;
-	  This->version = 8;
 	  This->dwVersion = dwVersion; 
 	  *ppDI = This;
 
@@ -129,7 +126,6 @@ HRESULT WINAPI DirectInputCreateEx(
 	  This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
 	  This->lpVtbl = &ddi8wvt;
 	  This->ref = 1;
-	  This->version = 8;
 	  This->dwVersion = dwVersion; 
 	  *ppDI = This;
 
@@ -150,12 +146,6 @@ HRESULT WINAPI DirectInputCreateA(HINSTA
 	This->lpVtbl = &ddi7avt;
 	This->ref = 1;
 	This->dwVersion = dwVersion; 
-	if (dwVersion >= 0x0800) {
-	    This->version = 8;
-	} else {
-	    /* We do not differientiate between version 1, 2 and 7 */
-	    This->version = 1;
-	}
 	*ppDI = (IDirectInputA*)This;
 	return 0;
 
@@ -172,12 +162,6 @@ HRESULT WINAPI DirectInputCreateW(HINSTA
 	This->lpVtbl = &ddi7wvt;
 	This->ref = 1;
 	This->dwVersion = dwVersion; 
-	if (dwVersion >= 0x0800) {
-	    This->version = 8;
-	} else {
-	    /* We do not differientiate between version 1, 2 and 7 */
-	    This->version = 1;
-	}
 	*ppDI = (IDirectInputW*)This;
 	return 0;
 }
@@ -234,16 +218,12 @@ static HRESULT WINAPI IDirectInputAImpl_
 	  lpCallback, pvRef, dwFlags);
     TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
 
-    /* joysticks are not supported in version 0x0300 */
-    if ((dwDevType == DIDEVTYPE_JOYSTICK) && (This->dwVersion <= 0x0300))
-        return E_INVALIDARG;
-
     for (i = 0; i < NB_DINPUT_DEVICES; i++) {
         if (!dinput_devices[i]->enum_deviceA) continue;
         for (j = 0, r = -1; r != 0; j++) {
 	    devInstance.dwSize = sizeof(devInstance);
 	    TRACE("  - checking device %d ('%s')\n", i, dinput_devices[i]->name);
-	    if ((r = dinput_devices[i]->enum_deviceA(dwDevType, dwFlags, &devInstance, This->version, j))) {
+	    if ((r = dinput_devices[i]->enum_deviceA(dwDevType, dwFlags, &devInstance, This->dwVersion, j))) {
 	        if (lpCallback(&devInstance,pvRef) == DIENUM_STOP)
 		    return 0;
 	    }
@@ -268,16 +248,12 @@ static HRESULT WINAPI IDirectInputWImpl_
 	  lpCallback, pvRef, dwFlags);
     TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
 
-    /* joysticks are not supported in version 0x0300 */
-    if ((dwDevType == DIDEVTYPE_JOYSTICK) && (This->dwVersion <= 0x0300))
-        return E_INVALIDARG;
-
     for (i = 0; i < NB_DINPUT_DEVICES; i++) {
         if (!dinput_devices[i]->enum_deviceW) continue;
         for (j = 0, r = -1; r != 0; j++) {
 	    devInstance.dwSize = sizeof(devInstance);
 	    TRACE("  - checking device %d ('%s')\n", i, dinput_devices[i]->name);
-	    if ((r = dinput_devices[i]->enum_deviceW(dwDevType, dwFlags, &devInstance, This->version, j))) {
+	    if ((r = dinput_devices[i]->enum_deviceW(dwDevType, dwFlags, &devInstance, This->dwVersion, j))) {
 	        if (lpCallback(&devInstance,pvRef) == DIENUM_STOP)
 		    return 0;
 	    }
Index: dlls/dinput/dinput_private.h
===================================================================
RCS file: /home/wine/wine/dlls/dinput/dinput_private.h,v
retrieving revision 1.15
diff -u -p -r1.15 dinput_private.h
--- dlls/dinput/dinput_private.h	13 May 2005 13:57:17 -0000	1.15
+++ dlls/dinput/dinput_private.h	14 May 2005 18:24:03 -0000
@@ -35,15 +35,14 @@ struct IDirectInputImpl
    /* Used to have an unique sequence number for all the events */
    DWORD evsequence;
 
-   int version;
    DWORD dwVersion;
 };
 
 /* Function called by all devices that Wine supports */
 struct dinput_device {
     const char *name;
-    BOOL (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id);
-    BOOL (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id);
+    BOOL (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id);
+    BOOL (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id);
     HRESULT (*create_deviceA)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev);
     HRESULT (*create_deviceW)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev);
 };
Index: dlls/dinput/joystick_linux.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick_linux.c,v
retrieving revision 1.25
diff -u -p -r1.25 joystick_linux.c
--- dlls/dinput/joystick_linux.c	13 May 2005 13:57:17 -0000	1.25
+++ dlls/dinput/joystick_linux.c	14 May 2005 18:24:05 -0000
@@ -148,7 +148,7 @@ static void _dump_DIDEVCAPS(LPDIDEVCAPS 
     }
 }
 
-static BOOL joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id)
+static BOOL joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
 {
     int fd = -1;
     char dev[32];
@@ -159,8 +159,8 @@ static BOOL joydev_enum_deviceA(DWORD dw
     }
 
     if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
-	(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {
+	((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
+	(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
         /* check whether we have a joystick */
         sprintf(dev, "%s%d", JOYDEV, id);
         if ((fd = open(dev,O_RDONLY)) < 0) {
@@ -173,7 +173,7 @@ static BOOL joydev_enum_deviceA(DWORD dw
         lpddi->guidInstance.Data3 = id;
         lpddi->guidProduct = DInput_Wine_Joystick_GUID;
         /* we only support traditional joysticks for now */
-        if (version >= 8)
+        if (version >= 0x0800)
             lpddi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
         else
             lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
@@ -196,7 +196,7 @@ static BOOL joydev_enum_deviceA(DWORD dw
     return FALSE;
 }
 
-static BOOL joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id)
+static BOOL joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
     int fd = -1;
     char name[MAX_PATH];
@@ -209,8 +209,8 @@ static BOOL joydev_enum_deviceW(DWORD dw
     }
 
     if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
-	(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {
+	((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
+	(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
         /* check whether we have a joystick */
         sprintf(dev, "%s%d", JOYDEV, id);
         if ((fd = open(dev,O_RDONLY)) < 0) {
@@ -223,7 +223,7 @@ static BOOL joydev_enum_deviceW(DWORD dw
         lpddi->guidInstance.Data3 = id;
         lpddi->guidProduct = DInput_Wine_Joystick_GUID;
         /* we only support traditional joysticks for now */
-        if (version >= 8)
+        if (version >= 0x0800)
             lpddi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
         else
             lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
@@ -557,7 +557,7 @@ static HRESULT alloc_device(REFGUID rgui
 
     newDevice->devcaps.dwSize = sizeof(newDevice->devcaps);
     newDevice->devcaps.dwFlags = DIDC_ATTACHED;
-    if (newDevice->dinput->version >= 8)
+    if (newDevice->dinput->dwVersion >= 0x0800)
         newDevice->devcaps.dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
     else
         newDevice->devcaps.dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
@@ -1124,8 +1124,8 @@ static HRESULT WINAPI JoystickAImpl_SetP
     TRACE("(%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
 
     if (ph == NULL) {
-        WARN("invalid pointer\n");
-        return E_INVALIDARG;
+        WARN("invalid parameter: ph == NULL\n");
+        return DIERR_INVALIDPARAM;
     }
 
     if (TRACE_ON(dinput))
@@ -1228,7 +1228,7 @@ static HRESULT WINAPI JoystickAImpl_GetC
     TRACE("%p->(%p)\n",iface,lpDIDevCaps);
 
     if (lpDIDevCaps == NULL) {
-        WARN("invalid parameter: lpDIDevCaps = NULL\n");
+        WARN("invalid pointer\n");
         return E_POINTER;
     }
 
@@ -1575,6 +1575,11 @@ HRESULT WINAPI JoystickAImpl_GetDeviceIn
     JoystickImpl *This = (JoystickImpl *)iface;
 
     TRACE("(%p,%p)\n", iface, pdidi);
+
+    if (pdidi == NULL) {
+        WARN("invalid pointer\n");
+        return E_POINTER;
+    }
 
     if ((pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3A)) &&
         (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))) {
Index: dlls/dinput/joystick_linuxinput.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick_linuxinput.c,v
retrieving revision 1.18
diff -u -p -r1.18 joystick_linuxinput.c
--- dlls/dinput/joystick_linuxinput.c	18 Mar 2005 10:25:15 -0000	1.18
+++ dlls/dinput/joystick_linuxinput.c	14 May 2005 18:24:05 -0000
@@ -164,7 +164,7 @@ static int joydev_have(void)
   return havejoy;
 }
 
-static BOOL joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id)
+static BOOL joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
 {
   int havejoy = 0;
 
@@ -172,8 +172,8 @@ static BOOL joydev_enum_deviceA(DWORD dw
       return FALSE;
 
   if (!((dwDevType == 0) ||
-        ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
-        (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))
+        ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 0x0800)) ||
+        (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))))
     return FALSE;
 
   if (dwFlags & DIEDFL_FORCEFEEDBACK)
@@ -191,7 +191,7 @@ static BOOL joydev_enum_deviceA(DWORD dw
   lpddi->guidProduct	= DInput_Wine_Joystick_GUID;
 
   lpddi->guidFFDriver = GUID_NULL;
-  if (version >= 8)
+  if (version >= 0x0800)
     lpddi->dwDevType    = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
   else
     lpddi->dwDevType    = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
@@ -202,7 +202,7 @@ static BOOL joydev_enum_deviceA(DWORD dw
   return TRUE;
 }
 
-static BOOL joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id)
+static BOOL joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
   int havejoy = 0;
 
@@ -210,8 +210,8 @@ static BOOL joydev_enum_deviceW(DWORD dw
       return FALSE;
 
   if (!((dwDevType == 0) ||
-        ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
-        (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))
+        ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 0x0800)) ||
+        (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))))
     return FALSE;
 
   if (dwFlags & DIEDFL_FORCEFEEDBACK)
@@ -229,7 +229,7 @@ static BOOL joydev_enum_deviceW(DWORD dw
   lpddi->guidProduct	= DInput_Wine_Joystick_GUID;
 
   lpddi->guidFFDriver = GUID_NULL;
-  if (version >= 8)
+  if (version >= 0x0800)
     lpddi->dwDevType    = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
   else
     lpddi->dwDevType    = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
@@ -755,7 +755,7 @@ static HRESULT WINAPI JoystickAImpl_GetC
 	wasacquired = 0;
     }
     lpDIDevCaps->dwFlags	= DIDC_ATTACHED;
-    if (This->dinput->version >= 8)
+    if (This->dinput->dwVersion >= 0x0800)
         lpDIDevCaps->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
     else
         lpDIDevCaps->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
Index: dlls/dinput/keyboard.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/keyboard.c,v
retrieving revision 1.16
diff -u -p -r1.16 keyboard.c
--- dlls/dinput/keyboard.c	24 Mar 2005 15:08:28 -0000	1.16
+++ dlls/dinput/keyboard.c	14 May 2005 18:24:05 -0000
@@ -154,7 +154,7 @@ static GUID DInput_Wine_Keyboard_GUID = 
   {0x8c, 0x73, 0x71, 0xdf, 0x54, 0xa9, 0x64, 0x41}
 };
 
-static void fill_keyboard_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, int version) {
+static void fill_keyboard_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version) {
     DWORD dwSize;
     DIDEVICEINSTANCEA ddi;
     
@@ -168,7 +168,7 @@ static void fill_keyboard_dideviceinstan
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysKeyboard;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Keyboard_GUID; /* Vendor's GUID */
-    if (version >= 8)
+    if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);
     else
         ddi.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
@@ -178,7 +178,7 @@ static void fill_keyboard_dideviceinstan
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
 
-static void fill_keyboard_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, int version) {
+static void fill_keyboard_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD version) {
     DWORD dwSize;
     DIDEVICEINSTANCEW ddi;
     
@@ -192,7 +192,7 @@ static void fill_keyboard_dideviceinstan
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysKeyboard;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Keyboard_GUID; /* Vendor's GUID */
-    if (version >= 8)
+    if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);
     else
         ddi.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
@@ -202,14 +202,14 @@ static void fill_keyboard_dideviceinstan
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
  
-static BOOL keyboarddev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id)
+static BOOL keyboarddev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
 {
   if (id != 0)
     return FALSE;
 
   if ((dwDevType == 0) ||
-      ((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||
-      (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {
+      ((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 0x0800)) ||
+      (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 0x0800))) {
     TRACE("Enumerating the Keyboard device\n");
  
     fill_keyboard_dideviceinstanceA(lpddi, version);
@@ -220,14 +220,14 @@ static BOOL keyboarddev_enum_deviceA(DWO
   return FALSE;
 }
 
-static BOOL keyboarddev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id)
+static BOOL keyboarddev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
   if (id != 0)
     return FALSE;
 
   if ((dwDevType == 0) ||
-      ((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||
-      (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {
+      ((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 0x0800)) ||
+      (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 0x0800))) {
     TRACE("Enumerating the Keyboard device\n");
 
     fill_keyboard_dideviceinstanceW(lpddi, version);
@@ -622,7 +622,7 @@ static HRESULT WINAPI SysKeyboardAImpl_G
     
     devcaps.dwSize = lpDIDevCaps->dwSize;
     devcaps.dwFlags = DIDC_ATTACHED;
-    if (This->dinput->version >= 8)
+    if (This->dinput->dwVersion >= 0x0800)
 	devcaps.dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);
     else
 	devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
@@ -727,7 +727,7 @@ static HRESULT WINAPI SysKeyboardAImpl_G
 	return DI_OK;
     }
 
-    fill_keyboard_dideviceinstanceA(pdidi, This->dinput->version);
+    fill_keyboard_dideviceinstanceA(pdidi, This->dinput->dwVersion);
     
     return DI_OK;
 }
@@ -742,7 +742,7 @@ static HRESULT WINAPI SysKeyboardWImpl_G
 	return DI_OK;
     }
 
-    fill_keyboard_dideviceinstanceW(pdidi, This->dinput->version);
+    fill_keyboard_dideviceinstanceW(pdidi, This->dinput->dwVersion);
     
     return DI_OK;
 }
Index: dlls/dinput/mouse.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/mouse.c,v
retrieving revision 1.24
diff -u -p -r1.24 mouse.c
--- dlls/dinput/mouse.c	9 May 2005 09:24:34 -0000	1.24
+++ dlls/dinput/mouse.c	14 May 2005 18:24:06 -0000
@@ -155,7 +155,7 @@ static GUID DInput_Wine_Mouse_GUID = { /
     {0x8d, 0x4a, 0x23, 0x90, 0x3f, 0xb6, 0xbd, 0xf7}
 };
 
-static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, int version) {
+static void fill_mouse_dideviceinstanceA(LPDIDEVICEINSTANCEA lpddi, DWORD version) {
     DWORD dwSize;
     DIDEVICEINSTANCEA ddi;
     
@@ -169,7 +169,7 @@ static void fill_mouse_dideviceinstanceA
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysMouse;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Mouse_GUID; /* Vendor's GUID */
-    if (version >= 8)
+    if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
     else
         ddi.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
@@ -179,7 +179,7 @@ static void fill_mouse_dideviceinstanceA
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
 
-static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, int version) {
+static void fill_mouse_dideviceinstanceW(LPDIDEVICEINSTANCEW lpddi, DWORD version) {
     DWORD dwSize;
     DIDEVICEINSTANCEW ddi;
     
@@ -193,7 +193,7 @@ static void fill_mouse_dideviceinstanceW
     ddi.dwSize = dwSize;
     ddi.guidInstance = GUID_SysMouse;/* DInput's GUID */
     ddi.guidProduct = DInput_Wine_Mouse_GUID; /* Vendor's GUID */
-    if (version >= 8)
+    if (version >= 0x0800)
         ddi.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
     else
         ddi.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
@@ -203,14 +203,14 @@ static void fill_mouse_dideviceinstanceW
     memcpy(lpddi, &ddi, (dwSize < sizeof(ddi) ? dwSize : sizeof(ddi)));
 }
 
-static BOOL mousedev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id)
+static BOOL mousedev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id)
 {
     if (id != 0)
         return FALSE;
 
     if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||
-	(((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {
+	((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
+	(((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 0x0800))) {
 	TRACE("Enumerating the mouse device\n");
 	
 	fill_mouse_dideviceinstanceA(lpddi, version);
@@ -221,14 +221,14 @@ static BOOL mousedev_enum_deviceA(DWORD 
     return FALSE;
 }
 
-static BOOL mousedev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id)
+static BOOL mousedev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id)
 {
     if (id != 0)
         return FALSE;
 
     if ((dwDevType == 0) ||
-	((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||
-	(((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {
+	((dwDevType == DIDEVTYPE_MOUSE) && (version < 0x0800)) ||
+	(((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 0x0800))) {
 	TRACE("Enumerating the mouse device\n");
 	
 	fill_mouse_dideviceinstanceW(lpddi, version);
@@ -945,7 +945,7 @@ static HRESULT WINAPI SysMouseAImpl_GetC
 
     devcaps.dwSize = lpDIDevCaps->dwSize;
     devcaps.dwFlags = DIDC_ATTACHED;
-    if (This->dinput->version >= 8)
+    if (This->dinput->dwVersion >= 0x0800)
 	devcaps.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
     else
 	devcaps.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
@@ -1071,7 +1071,7 @@ static HRESULT WINAPI SysMouseAImpl_GetD
 	return DI_OK;
     }
 
-    fill_mouse_dideviceinstanceA(pdidi, This->dinput->version);
+    fill_mouse_dideviceinstanceA(pdidi, This->dinput->dwVersion);
     
     return DI_OK;
 }
@@ -1086,7 +1086,7 @@ static HRESULT WINAPI SysMouseWImpl_GetD
 	return DI_OK;
     }
 
-    fill_mouse_dideviceinstanceW(pdidi, This->dinput->version);
+    fill_mouse_dideviceinstanceW(pdidi, This->dinput->dwVersion);
     
     return DI_OK;
 }
Index: dlls/dinput/tests/joystick.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/tests/joystick.c,v
retrieving revision 1.2
diff -u -p -r1.2 joystick.c
--- dlls/dinput/tests/joystick.c	13 May 2005 13:57:17 -0000	1.2
+++ dlls/dinput/tests/joystick.c	14 May 2005 18:24:06 -0000
@@ -80,9 +80,9 @@ HWND get_hwnd()
 typedef struct tagJoystickInfo
 {
     LPDIRECTINPUTDEVICE pJoystick;
-    int axis;
-    int pov;
-    int button;
+    DWORD axis;
+    DWORD pov;
+    DWORD button;
 } JoystickInfo;
 
 static BOOL CALLBACK EnumAxes(
@@ -136,7 +136,12 @@ static BOOL CALLBACK EnumJoysticks(
     JoystickInfo info;
     int i, count;
     ULONG ref;
+    DIDEVICEINSTANCE inst;
+    DIDEVICEINSTANCE_DX3 inst3;
+    HWND hWnd = get_hwnd();
 
+    ok(data->version > 0x0300, "Joysticks not supported in version 0x%04lx\n", data->version);
+ 
     hr = IDirectInput_CreateDevice(data->pDI, &lpddi->guidInstance, NULL, NULL);
     ok(hr==E_POINTER,"IDirectInput_CreateDevice() should have returned "
        "E_POINTER, returned: %s\n", DXGetErrorString8(hr));
@@ -187,8 +192,8 @@ static BOOL CALLBACK EnumJoysticks(
     if (hr != DI_OK)
         goto RELEASE;
 
-    hr = IDirectInputDevice_SetCooperativeLevel(pJoystick, get_hwnd(),
-                                                DISCL_EXCLUSIVE | DISCL_FOREGROUND);
+    hr = IDirectInputDevice_SetCooperativeLevel(pJoystick, hWnd,
+                                                DISCL_NONEXCLUSIVE | DISCL_BACKGROUND);
     ok(hr==DI_OK,"IDirectInputDevice_SetCooperativeLevel() failed: %s\n",
        DXGetErrorString8(hr));
 
@@ -213,13 +218,36 @@ static BOOL CALLBACK EnumJoysticks(
     info.pJoystick = pJoystick;
 
     /* enumerate objects */
-    hr = IDirectInputDevice_EnumObjects(pJoystick,  EnumAxes, (VOID*)&info, DIDFT_ALL);
+    hr = IDirectInputDevice_EnumObjects(pJoystick, EnumAxes, (VOID*)&info, DIDFT_ALL);
     ok(hr==DI_OK,"IDirectInputDevice_EnumObjects() failed: %s\n",
        DXGetErrorString8(hr));
 
     ok(caps.dwAxes == info.axis, "Number of enumerated axes doesn't match capabilities\n");
     ok(caps.dwButtons == info.button, "Number of enumerated buttons doesn't match capabilities\n");
-    ok(caps.dwPOVs == info.pov, "Number of enumerated buttons doesn't match capabilities\n");
+    ok(caps.dwPOVs == info.pov, "Number of enumerated POVs doesn't match capabilities\n");
+
+    hr = IDirectInputDevice_GetDeviceInfo(pJoystick, 0);
+    ok(hr==E_POINTER, "IDirectInputDevice_GetDeviceInfo() "
+       "should have returned E_POINTER, returned: %s\n",
+       DXGetErrorString8(hr));
+
+    ZeroMemory(&inst, sizeof(inst));
+    ZeroMemory(&inst3, sizeof(inst3));
+
+    hr = IDirectInputDevice_GetDeviceInfo(pJoystick, &inst);
+    ok(hr==DIERR_INVALIDPARAM, "IDirectInputDevice_GetDeviceInfo() "
+       "should have returned DIERR_INVALIDPARAM, returned: %s\n",
+       DXGetErrorString8(hr));
+
+    inst.dwSize = sizeof(inst);
+    hr = IDirectInputDevice_GetDeviceInfo(pJoystick, &inst);
+    ok(hr==DI_OK,"IDirectInputDevice_GetDeviceInfo() failed: %s\n",
+       DXGetErrorString8(hr));
+
+    inst3.dwSize = sizeof(inst3);
+    hr = IDirectInputDevice_GetDeviceInfo(pJoystick, (LPDIDEVICEINSTANCE)&inst3);
+    ok(hr==DI_OK,"IDirectInputDevice_GetDeviceInfo() failed: %s\n",
+       DXGetErrorString8(hr));
 
     hr = IDirectInputDevice_Acquire(pJoystick);
     ok(hr==DI_OK,"IDirectInputDevice_Acquire() failed: %s\n",
@@ -271,9 +299,10 @@ static void joystick_tests(DWORD version
     HRESULT hr;
     LPDIRECTINPUT pDI;
     ULONG ref;
+    HINSTANCE hInstance = GetModuleHandle(NULL);
 
     trace("-- Testing Direct Input Version 0x%04lx --\n", version);
-    hr = DirectInputCreate(GetModuleHandle(NULL), version, &pDI, NULL);
+    hr = DirectInputCreate(hInstance, version, &pDI, NULL);
     ok(hr==DI_OK||hr==DIERR_OLDDIRECTINPUTVERSION,
        "DirectInputCreate() failed: %s\n", DXGetErrorString8(hr));
     if (hr==DI_OK && pDI!=0) {
@@ -282,14 +311,8 @@ static void joystick_tests(DWORD version
         data.version = version;
         hr = IDirectInput_EnumDevices(pDI, DIDEVTYPE_JOYSTICK, EnumJoysticks,
                                       &data, DIEDFL_ALLDEVICES);
-        if (version == 0x0300) {
-            trace("  Joysticks Not Supported\n");
-            ok(hr==E_INVALIDARG,"IDirectInput_EnumDevices() should have "
-               "returned E_INVALIDARG, returned: %s\n", DXGetErrorString8(hr));
-        } else {
-            ok(hr==DI_OK,"IDirectInput_EnumDevices() failed: %s\n",
-               DXGetErrorString8(hr));
-        }
+        ok(hr==DI_OK,"IDirectInput_EnumDevices() failed: %s\n",
+           DXGetErrorString8(hr));
         ref = IDirectInput_Release(pDI);
         ok(ref==0,"IDirectInput_Release() reference count = %ld\n", ref);
     } else if (hr==DIERR_OLDDIRECTINPUTVERSION)


More information about the wine-patches mailing list