Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- v3: Resending, looked like a testbot hiccup caused test failures last time.
dlls/dinput/dinput_main.c | 15 ++++++++++++--- dlls/dinput8/tests/device.c | 3 --- 2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 0855cb41cd..d70e9c86f2 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -1717,10 +1717,11 @@ static DWORD WINAPI hook_thread_proc(void *param) if (msg.message == WM_USER+0x10) { IDirectInputImpl *dinput; + HANDLE finished_event = (HANDLE)msg.lParam;
- TRACE( "Processing hook change notification lp:%ld\n", msg.lParam ); + TRACE( "Processing hook change notification wp:%ld lp:%#lx\n", msg.wParam, msg.lParam );
- if (!msg.wParam && !msg.lParam) + if (!msg.wParam) { if (kbd_hook) UnhookWindowsHookEx( kbd_hook ); if (mouse_hook) UnhookWindowsHookEx( mouse_hook ); @@ -1765,6 +1766,9 @@ static DWORD WINAPI hook_thread_proc(void *param) UnhookWindowsHookEx( mouse_hook ); mouse_hook = NULL; } + + if (finished_event) + SetEvent(finished_event); } TranslateMessage(&msg); DispatchMessageW(&msg); @@ -1824,6 +1828,7 @@ void check_dinput_hooks(LPDIRECTINPUTDEVICE8W iface, BOOL acquired) static HHOOK callwndproc_hook; static ULONG foreground_cnt; IDirectInputDeviceImpl *dev = impl_from_IDirectInputDevice8W(iface); + HANDLE hook_change_finished_event;
EnterCriticalSection(&dinput_hook_crit);
@@ -1851,9 +1856,13 @@ void check_dinput_hooks(LPDIRECTINPUTDEVICE8W iface, BOOL acquired) hook_thread_event = NULL; }
- PostThreadMessageW( hook_thread_id, WM_USER+0x10, 1, 0 ); + hook_change_finished_event = CreateEventW( NULL, FALSE, FALSE, NULL ); + PostThreadMessageW( hook_thread_id, WM_USER+0x10, 1, (LPARAM)hook_change_finished_event );
LeaveCriticalSection(&dinput_hook_crit); + + WaitForSingleObject(hook_change_finished_event, INFINITE); + CloseHandle(hook_change_finished_event); }
void check_dinput_events(void) diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c index ea5ab75109..bb82855d40 100644 --- a/dlls/dinput8/tests/device.c +++ b/dlls/dinput8/tests/device.c @@ -798,12 +798,10 @@ static void test_keyboard_events(void) data_size = ARRAY_SIZE(obj_data); hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0); ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr); - todo_wine ok(data_size == 1, "Expected 1 element, received %d\n", data_size);
hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(kbdata), kbdata); ok(SUCCEEDED(hr), "IDirectInputDevice8_GetDeviceState failed: %08x\n", hr); - todo_wine ok(kbdata[DIK_SPACE], "Expected DIK_SPACE key state down\n");
keybd_event(VK_SPACE, DIK_SPACE, KEYEVENTF_KEYUP, 0); @@ -812,7 +810,6 @@ static void test_keyboard_events(void) data_size = ARRAY_SIZE(obj_data); hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0); ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr); - todo_wine ok(data_size == 1, "Expected 1 element, received %d\n", data_size);
/* Test injecting keyboard events with scancode=0.
Grand Theft Auto IV injects VK_F8 and scancode=0, and expects DirectInput not to report that F8 is pressed.
Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- dlls/dinput/keyboard.c | 3 --- dlls/dinput8/tests/device.c | 2 -- 2 files changed, 5 deletions(-)
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 47f28cac52..cecf6c546f 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -70,9 +70,6 @@ static inline IDirectInputDevice8W *IDirectInputDevice8W_from_impl(SysKeyboardIm
static BYTE map_dik_code(DWORD scanCode, DWORD vkCode, DWORD subType) { - if (!scanCode) - scanCode = MapVirtualKeyW(vkCode, MAPVK_VK_TO_VSC); - if (subType == DIDEVTYPEKEYBOARD_JAPAN106) { switch (scanCode) diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c index bb82855d40..39c635f2fb 100644 --- a/dlls/dinput8/tests/device.c +++ b/dlls/dinput8/tests/device.c @@ -820,7 +820,6 @@ static void test_keyboard_events(void) data_size = ARRAY_SIZE(obj_data); hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0); ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr); - todo_wine ok(data_size == 0, "Expected 0 elements, received %d\n", data_size);
hr = IDirectInputDevice8_GetDeviceState(di_keyboard, sizeof(kbdata), kbdata); @@ -834,7 +833,6 @@ static void test_keyboard_events(void) data_size = ARRAY_SIZE(obj_data); hr = IDirectInputDevice8_GetDeviceData(di_keyboard, sizeof(DIDEVICEOBJECTDATA), obj_data, &data_size, 0); ok(SUCCEEDED(hr), "Failed to get data hr=%08x\n", hr); - todo_wine ok(data_size == 0, "Expected 0 elements, received %d\n", data_size);
hr = IDirectInputDevice8_Unacquire(di_keyboard);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=69646
Your paranoid android.
=== debiant (32 bit report) ===
dinput: keyboard.c:154: Test failed: Keyboard event not processed, skipping test mouse: Timeout
=== debiant (32 bit Chinese:China report) ===
dinput: mouse: Timeout
=== debiant (32 bit WoW report) ===
dinput: mouse: Timeout
=== debiant (64 bit WoW report) ===
dinput: mouse: Timeout
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=69645
Your paranoid android.
=== debiant (32 bit report) ===
dinput: mouse: Timeout
=== debiant (32 bit Chinese:China report) ===
dinput: mouse: Timeout
=== debiant (32 bit WoW report) ===
dinput: mouse: Timeout
=== debiant (64 bit WoW report) ===
dinput: mouse: Timeout
Brendan Shanks bshanks@codeweavers.com writes:
Signed-off-by: Brendan Shanks bshanks@codeweavers.com
v3: Resending, looked like a testbot hiccup caused test failures last time.
No, I'm seeing the same failures here.