Module: wine Branch: master Commit: 841214ddb4d4dc620e6b51dfe6655b585d423edc URL: http://source.winehq.org/git/wine.git/?a=commit;h=841214ddb4d4dc620e6b51dfe6...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Nov 21 19:20:27 2012 +0100
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 2ffbf6e..ba37a3a 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 bfc3830..9816f13 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 );