From: Rémi Bernon rbernon@codeweavers.com
Instead of relying on ProcessEvents return value. --- dlls/win32u/message.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index dc316922581..87efad6202c 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -3164,9 +3164,25 @@ static HANDLE get_server_queue_handle(void) return ret; }
+static BOOL is_queue_signaled(void) +{ + 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 & queue_shm->wake_mask) || + (queue_shm->changed_bits & queue_shm->changed_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(); }
void check_for_events( UINT flags )