Module: wine Branch: master Commit: 157528eb0f826f1008488097e361ffc2872d640f URL: http://source.winehq.org/git/wine.git/?a=commit;h=157528eb0f826f1008488097e3...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Thu Oct 13 21:22:26 2011 -0600
dinput: GetDeviceData always succeeds regardless if buffering is enabled or device is acquired.
---
dlls/dinput/device.c | 4 +--- dlls/dinput/tests/device.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index a4052ea..83740c5 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -1286,10 +1286,8 @@ HRESULT WINAPI IDirectInputDevice2WImpl_GetDeviceData(LPDIRECTINPUTDEVICE8W ifac TRACE("(%p) %p -> %p(%d) x%d, 0x%08x\n", This, dod, entries, entries ? *entries : 0, dodsize, flags);
- if (!This->acquired) - return DIERR_NOTACQUIRED; if (!This->queue_len) - return DIERR_NOTBUFFERED; + return DI_OK; if (dodsize < sizeof(DIDEVICEOBJECTDATA_DX3)) return DIERR_INVALIDPARAM;
diff --git a/dlls/dinput/tests/device.c b/dlls/dinput/tests/device.c index e79c564..2e4e4f8 100644 --- a/dlls/dinput/tests/device.c +++ b/dlls/dinput/tests/device.c @@ -103,6 +103,9 @@ static void test_object_info(LPDIRECTINPUTDEVICE device, HWND hwnd) hr = IDirectInputDevice_GetObjectInfo(device, &obj_info, 16, DIPH_BYOFFSET); if (SUCCEEDED(hr)) { + DWORD cnt; + DIDEVICEOBJECTDATA buffer[5]; + /* No device supports per axis relative/absolute mode */ memset(&dp, 0, sizeof(dp)); dp.diph.dwSize = sizeof(DIPROPDWORD); @@ -119,9 +122,28 @@ static void test_object_info(LPDIRECTINPUTDEVICE device, HWND hwnd) hr = IDirectInputDevice_SetProperty(device, DIPROP_AXISMODE, &dp.diph); ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr);
+ dp.dwData = 0; + hr = IDirectInputDevice_SetProperty(device, DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dp.diph); + ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr); + + cnt = 5; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK && cnt == 5, "GetDeviceData() failed: %08x cnt: %d\n", hr, cnt); + + dp.dwData = 20; + hr = IDirectInputDevice_SetProperty(device, DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dp.diph); + ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr); + + cnt = 1; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK, "GetDeviceData() failed: %08x\n", hr); + /* Cannot change mode while acquired */ hr = IDirectInputDevice_Acquire(device); ok(hr == DI_OK, "Acquire() failed: %08x\n", hr); + cnt = 1; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK, "GetDeviceData() failed: %08x\n", hr); hr = IDirectInputDevice_SetProperty(device, DIPROP_AXISMODE, &dp.diph); ok(hr == DIERR_ACQUIRED, "SetProperty() returned: %08x\n", hr); hr = IDirectInputDevice_Unacquire(device);