From 841214ddb4d4dc620e6b51dfe6655b585d423edc Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 21 Nov 2012 19:20:27 +0100 Subject: [PATCH] user32: Don't check for driver events before normal messages in PeekMessage. --- dlls/user32/message.c | 15 ++++++++++----- dlls/user32/tests/msg.c | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 2ffbf6e4c2c..ba37a3a5f45 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -3681,14 +3681,19 @@ BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first, USER_CheckNotLock(); - /* check for graphics events */ - USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 ); - if (!peek_message( &msg, hwnd, first, last, flags, 0 )) { + DWORD ret; + flush_window_surfaces( !(flags & PM_NOYIELD) ); - if (!(flags & PM_NOYIELD)) wow_handlers.wait_message( 0, NULL, 0, 0, 0 ); - return FALSE; + + if (flags & PM_NOYIELD) + ret = USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 ); + else + ret = wow_handlers.wait_message( 0, NULL, 0, 0, 0 ); + + /* if we received driver events, check again for a pending message */ + if (ret == WAIT_TIMEOUT || !peek_message( &msg, hwnd, first, last, flags, 0 )) return FALSE; } /* copy back our internal safe copy of message data to msg_out. diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index bfc3830d236..9816f13d359 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -6795,6 +6795,7 @@ static void test_interthread_messages(void) wnd_event.hwnd = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 200, 200, 0, 0, 0, NULL); ok (wnd_event.hwnd != 0, "Failed to create parent window\n"); + flush_events(); flush_sequence(); log_all_parent_messages++; wnd_event.start_event = CreateEventA( NULL, TRUE, FALSE, NULL );