Module: wine Branch: master Commit: c0e876cb9e0f0d5663eddeda0fdbf7d2b491f9a9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c0e876cb9e0f0d5663eddeda0f...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Tue Apr 21 16:01:37 2015 +0800
server: GetQueueStatus should clear only checked queue changed bits.
---
dlls/user32/input.c | 4 ++-- dlls/user32/tests/msg.c | 1 - include/wine/server_protocol.h | 4 ++-- server/protocol.def | 2 +- server/queue.c | 2 +- server/request.h | 2 +- server/trace.c | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 57594a7..4fcc531 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -434,7 +434,7 @@ DWORD WINAPI GetQueueStatus( UINT flags )
SERVER_START_REQ( get_queue_status ) { - req->clear = 1; + req->clear_bits = flags; wine_server_call( req ); ret = MAKELONG( reply->changed_bits & flags, reply->wake_bits & flags ); } @@ -454,7 +454,7 @@ BOOL WINAPI GetInputState(void)
SERVER_START_REQ( get_queue_status ) { - req->clear = 0; + req->clear_bits = 0; wine_server_call( req ); ret = reply->wake_bits & (QS_KEY | QS_MOUSEBUTTON); } diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 4794b12..50e1e2b 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -14699,7 +14699,6 @@ static void test_SendMessage_other_thread(int thread_n) }
ret = GetQueueStatus(QS_SENDMESSAGE|QS_POSTMESSAGE); -todo_wine ok(ret == MAKELONG(QS_POSTMESSAGE, QS_SENDMESSAGE|QS_POSTMESSAGE), "wrong status %08x\n", ret);
trace("main: call GetMessage\n"); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index d27914a..37dad95 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -2822,7 +2822,7 @@ struct set_queue_mask_reply struct get_queue_status_request { struct request_header __header; - int clear; + unsigned int clear_bits; }; struct get_queue_status_reply { @@ -5972,6 +5972,6 @@ union generic_reply struct terminate_job_reply terminate_job_reply; };
-#define SERVER_PROTOCOL_VERSION 467 +#define SERVER_PROTOCOL_VERSION 468
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/protocol.def b/server/protocol.def index 54501e8..5d57f96 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2059,7 +2059,7 @@ enum char_info_mode
/* Get the current message queue status */ @REQ(get_queue_status) - int clear; /* should we clear the change bits? */ + unsigned int clear_bits; /* should we clear the change bits? */ @REPLY unsigned int wake_bits; /* wake bits */ unsigned int changed_bits; /* changed bits since last time */ diff --git a/server/queue.c b/server/queue.c index 3a321cd..912df3a 100644 --- a/server/queue.c +++ b/server/queue.c @@ -2198,7 +2198,7 @@ DECL_HANDLER(get_queue_status) { reply->wake_bits = queue->wake_bits; reply->changed_bits = queue->changed_bits; - if (req->clear) queue->changed_bits = 0; + queue->changed_bits &= ~req->clear_bits; } else reply->wake_bits = reply->changed_bits = 0; } diff --git a/server/request.h b/server/request.h index f94235f..daa5301 100644 --- a/server/request.h +++ b/server/request.h @@ -1416,7 +1416,7 @@ C_ASSERT( sizeof(struct set_queue_mask_request) == 24 ); C_ASSERT( FIELD_OFFSET(struct set_queue_mask_reply, wake_bits) == 8 ); C_ASSERT( FIELD_OFFSET(struct set_queue_mask_reply, changed_bits) == 12 ); C_ASSERT( sizeof(struct set_queue_mask_reply) == 16 ); -C_ASSERT( FIELD_OFFSET(struct get_queue_status_request, clear) == 12 ); +C_ASSERT( FIELD_OFFSET(struct get_queue_status_request, clear_bits) == 12 ); C_ASSERT( sizeof(struct get_queue_status_request) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_queue_status_reply, wake_bits) == 8 ); C_ASSERT( FIELD_OFFSET(struct get_queue_status_reply, changed_bits) == 12 ); diff --git a/server/trace.c b/server/trace.c index 20895b1..6ac0549 100644 --- a/server/trace.c +++ b/server/trace.c @@ -2546,7 +2546,7 @@ static void dump_set_queue_mask_reply( const struct set_queue_mask_reply *req )
static void dump_get_queue_status_request( const struct get_queue_status_request *req ) { - fprintf( stderr, " clear=%d", req->clear ); + fprintf( stderr, " clear_bits=%08x", req->clear_bits ); }
static void dump_get_queue_status_reply( const struct get_queue_status_reply *req )