[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