[PATCH v2 5/8] server: Support filtering sent internal messages.
Rémi Bernon
rbernon at codeweavers.com
Thu Oct 1 05:20:01 CDT 2020
We will need this to process only 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 2c780a94e2c..85491675abb 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2496,8 +2496,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;
@@ -2515,9 +2515,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) &&
+ !check_msg_filter( msg->msg, req->get_first, req->get_last ))
+ continue;
receive_message( queue, msg, reply );
return;
}
--
2.28.0
More information about the wine-devel
mailing list