Alexandre Julliard : user32: Don' t check for driver events before normal messages in PeekMessage.
Alexandre Julliard
julliard at winehq.org
Wed Nov 21 14:45:16 CST 2012
Module: wine
Branch: master
Commit: 841214ddb4d4dc620e6b51dfe6655b585d423edc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=841214ddb4d4dc620e6b51dfe6655b585d423edc
Author: Alexandre Julliard <julliard at 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 );
More information about the wine-cvs
mailing list