diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index 1a5e25f3d77..2c4cc6d8c1b 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -452,9 +452,12 @@ HRESULT create_DataFormat(LPCDIDATAFORMAT asked_format, DataFormat *format) dt[index].size = sizeof(DWORD); dt[index].offset_in = -1; dt[index].offset_out = asked_format->rgodf[j].dwOfs; - dt[index].value = 0; + if (asked_format->rgodf[j].dwType & DIDFT_POV) + dt[index].value = -1; + else + dt[index].value = 0; index++; - + same = 0; } } diff --git a/dlls/dinput/tests/joystick.c b/dlls/dinput/tests/joystick.c index d8c05f000bd..4727a5ad441 100644 --- a/dlls/dinput/tests/joystick.c +++ b/dlls/dinput/tests/joystick.c @@ -324,6 +324,13 @@ static BOOL CALLBACK EnumJoysticks( ok(hr == S_FALSE, "IDirectInputDevice_Acquire() should have returned S_FALSE, got: %s\n", DXGetErrorString8(hr)); + if (info.pov < 4) + { + hr = IDirectInputDevice_GetDeviceState(pJoystick, sizeof(DIJOYSTATE2), &js); + ok(hr == DI_OK, "IDirectInputDevice_GetDeviceState() failed: %s\n", DXGetErrorString8(hr)); + ok(js.rgdwPOV[3] == -1, "Default for unassigned POV should be -1 not: %d\n", js.rgdwPOV[3]); + } + if (winetest_interactive) { trace("You have 30 seconds to test all axes, sliders, POVs and buttons\n"); count = 300;