[PATCH 4/6] server: Allow filtering internal sent messages.
Rémi Bernon
rbernon at codeweavers.com
Mon Apr 27 02:06:24 CDT 2020
We will need this to discard a specific internal message type without
processing any of the other messages.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
server/queue.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/server/queue.c b/server/queue.c
index 84ee0f9a4eac..fcb15d91daa1 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2386,8 +2386,8 @@ DECL_HANDLER(post_quit_message)
/* get a message from the current queue */
DECL_HANDLER(get_message)
{
+ struct message *msg;
struct timer *timer;
- struct list *ptr;
struct msg_queue *queue = get_current_queue();
user_handle_t get_win = get_user_full_handle( req->get_win );
unsigned int filter = req->flags >> 16;
@@ -2405,9 +2405,12 @@ DECL_HANDLER(get_message)
if (!filter) filter = QS_ALLINPUT;
/* first check for sent messages */
- if ((ptr = list_head( &queue->msg_list[SEND_MESSAGE] )))
+ LIST_FOR_EACH_ENTRY( msg, &queue->msg_list[SEND_MESSAGE], struct message, entry )
{
- struct message *msg = LIST_ENTRY( ptr, struct message, entry );
+ /* skip filtered internal messages */
+ if ((req->get_first & 0x80000000) && (req->get_last & 0x80000000) &&
+ (req->get_first > msg->msg || req->get_last < msg->msg))
+ continue;
receive_message( queue, msg, reply );
return;
}
--
2.26.1
More information about the wine-devel
mailing list