user: Remove internal messages from the message queue before handling them.
diff --git a/dlls/user/message.c b/dlls/user/message.c index 99d1748..2a1a9d9 100644 --- a/dlls/user/message.c +++ b/dlls/user/message.c
@@ -2728,9 +2728,14 @@ } if (msg.message & 0x80000000) { - handle_internal_message( msg.hwnd, msg.message, msg.wParam, msg.lParam ); - if (!(flags & PM_REMOVE)) /* have to remove it explicitly */ + if (!(flags & PM_REMOVE)) + { + /* Have to remove the message explicitly. + Do this before handling it, because the message handler may + call PeekMessage again */ peek_message( &msg, msg.hwnd, msg.message, msg.message, GET_MSG_REMOVE ); + } + handle_internal_message( msg.hwnd, msg.message, msg.wParam, msg.lParam ); } else break; }