From: Rémi Bernon rbernon@codeweavers.com
Instead of relying on ProcessEvents return value. --- dlls/user32/tests/input.c | 4 ++-- dlls/win32u/message.c | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 9b52599b6b0..9c1f2ce9c74 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -4316,8 +4316,8 @@ static void test_SendInput_mouse_messages(void)
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); wait_messages( 5, FALSE ); - button_down_hwnd_todo[1].message.hwnd = hwnd; - ok_seq( button_down_hwnd_todo ); + button_down_hwnd[1].message.hwnd = hwnd; + ok_seq( button_down_hwnd ); mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); wait_messages( 5, FALSE ); button_up_hwnd[1].message.hwnd = hwnd; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index dc316922581..204fc0a37c8 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -3164,9 +3164,24 @@ static HANDLE get_server_queue_handle(void) return ret; }
+static BOOL is_queue_signaled( UINT mask ) +{ + struct object_lock lock = OBJECT_LOCK_INIT; + const queue_shm_t *queue_shm; + BOOL signaled = FALSE; + UINT status; + + while ((status = get_shared_queue( &lock, &queue_shm )) == STATUS_PENDING) + signaled = queue_shm->wake_bits & mask; + if (status) return FALSE; + + return signaled; +} + BOOL process_driver_events( UINT mask ) { - return user_driver->pProcessEvents( mask ); + user_driver->pProcessEvents( mask ); + return is_queue_signaled( QS_INPUT ); }
void check_for_events( UINT flags )