[PATCH 2/2] win32u: Return FALSE from ReplyMessage if it was replied already.

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Jun 9 13:40:35 CDT 2022


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/user32/tests/msg.c |  2 --
 dlls/win32u/message.c   | 13 ++++++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index fab3221..e1add5e 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -18574,7 +18574,6 @@ static LRESULT CALLBACK insendmessage_wnd_proc( HWND hwnd, UINT msg, WPARAM wp,
         flags = InSendMessageEx( NULL );
         ok( flags == (ISMEX_SEND | ISMEX_REPLIED), "wrong flags %lx\n", flags );
         ret = ReplyMessage( msg );
-        todo_wine
         ok( !ret, "ReplyMessage returned %u\n", ret );
         flags = InSendMessageEx( NULL );
         ok( flags == (ISMEX_SEND | ISMEX_REPLIED), "wrong flags %lx\n", flags );
@@ -18600,7 +18599,6 @@ static LRESULT CALLBACK insendmessage_wnd_proc( HWND hwnd, UINT msg, WPARAM wp,
         ok( flags == (ISMEX_CALLBACK | ISMEX_REPLIED) || flags == ISMEX_SEND, "wrong flags %lx\n", flags );
         ok( InSendMessage(), "InSendMessage returned false\n" );
         ret = ReplyMessage( msg );
-        todo_wine
         ok( !ret, "ReplyMessage returned %u\n", ret );
         flags = InSendMessageEx( NULL );
         ok( flags == (ISMEX_CALLBACK | ISMEX_REPLIED) || flags == ISMEX_SEND, "wrong flags %lx\n", flags );
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index b41d252..d717dfb 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -1032,14 +1032,14 @@ static void unpack_reply( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam,
  *
  * Send a reply to a sent message.
  */
-static void reply_message( struct received_message_info *info, LRESULT result, MSG *msg )
+static BOOL reply_message( struct received_message_info *info, LRESULT result, MSG *msg )
 {
     struct packed_message data;
     int i, replied = info->flags & ISMEX_REPLIED;
     BOOL remove = msg != NULL;
 
-    if (info->flags & ISMEX_NOTIFY) return;  /* notify messages don't get replies */
-    if (!remove && replied) return;  /* replied already */
+    if (info->flags & ISMEX_NOTIFY) return TRUE;  /* notify messages don't get replies */
+    if (!remove && replied) return FALSE;  /* replied already */
 
     memset( &data, 0, sizeof(data) );
     info->flags |= ISMEX_REPLIED;
@@ -1058,6 +1058,8 @@ static void reply_message( struct received_message_info *info, LRESULT result, M
         wine_server_call( req );
     }
     SERVER_END_REQ;
+
+    return TRUE;
 }
 
 /***********************************************************************
@@ -1068,11 +1070,12 @@ static void reply_message( struct received_message_info *info, LRESULT result, M
 BOOL reply_message_result( LRESULT result, MSG *msg )
 {
     struct received_message_info *info = get_user_thread_info()->receive_info;
+    BOOL ret;
 
     if (!info) return FALSE;
-    reply_message( info, result, msg );
+    ret = reply_message( info, result, msg );
     if (msg) get_user_thread_info()->receive_info = info->prev;
-    return TRUE;
+    return ret;
 }
 
 /***********************************************************************
-- 
2.34.1




More information about the wine-devel mailing list