diff --git a/dlls/user32/message.c b/dlls/user32/message.c index c1fe03611cb..b9347051b04 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -3682,8 +3682,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first, if (!peek_message( &msg, hwnd, first, last, flags, 0 )) { - if (flags & PM_NOYIELD) flush_window_surfaces( FALSE ); - else wow_handlers.wait_message( 0, NULL, 0, 0, 0 ); + flush_window_surfaces( !(flags & PM_NOYIELD) ); + if (!(flags & PM_NOYIELD)) wow_handlers.wait_message( 0, NULL, 0, 0, 0 ); return FALSE; } @@ -3739,6 +3739,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetMessageW( MSG *msg, HWND hwnd, UINT first, UINT while (!peek_message( msg, hwnd, first, last, PM_REMOVE | (mask << 16), mask )) { + flush_window_surfaces( TRUE ); wow_handlers.wait_message( 1, &server_queue, INFINITE, mask, 0 ); } @@ -4071,6 +4072,7 @@ DWORD WINAPI MsgWaitForMultipleObjectsEx( DWORD count, CONST HANDLE *pHandles, for (i = 0; i < count; i++) handles[i] = pHandles[i]; handles[count] = get_server_queue_handle(); + flush_window_surfaces( TRUE ); return wow_handlers.wait_message( count+1, handles, timeout, mask, flags ); } diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 33afbdd7458..3b13b82c35a 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -1124,10 +1124,7 @@ static LRESULT WINAPI StaticWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM static DWORD wait_message( DWORD count, CONST HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags ) { - DWORD ret; - - flush_window_surfaces( TRUE ); - ret = USER_Driver->pMsgWaitForMultipleObjectsEx( count, handles, timeout, mask, flags ); + DWORD ret = USER_Driver->pMsgWaitForMultipleObjectsEx( count, handles, timeout, mask, flags ); if (ret == WAIT_TIMEOUT && !count && !timeout) NtYieldExecution(); return ret; }