From: Conor McCarthy cmccarthy@codeweavers.com
For consistency with set_cursor. --- dlls/win32u/message.c | 7 +++---- include/wine/server_protocol.h | 6 ++---- server/protocol.def | 3 +-- server/queue.c | 6 ++++-- server/request_handlers.h | 9 ++++----- server/request_trace.h | 3 +-- 6 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 9e8f9d54af8..3147cdd58b0 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -3777,7 +3777,7 @@ LRESULT send_internal_message_timeout( DWORD dest_pid, DWORD dest_tid, NTSTATUS send_hardware_message( HWND hwnd, UINT flags, const INPUT *input, LPARAM lparam ) { struct send_message_info info; - int prev_x, prev_y, new_x, new_y; + int new_x, new_y, moved; NTSTATUS ret; BOOL wait;
@@ -3851,14 +3851,13 @@ NTSTATUS send_hardware_message( HWND hwnd, UINT flags, const INPUT *input, LPARA } ret = wine_server_call( req ); wait = reply->wait; - prev_x = reply->prev_x; - prev_y = reply->prev_y; + moved = reply->moved; new_x = reply->new_x; new_y = reply->new_y; } SERVER_END_REQ;
- if (!ret && (flags & SEND_HWMSG_INJECTED) && (prev_x != new_x || prev_y != new_y)) + if (!ret && (flags & SEND_HWMSG_INJECTED) && moved) user_driver->pSetCursorPos( new_x, new_y );
if (wait) diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 7574a52d106..9cc4939f7f8 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -3115,11 +3115,9 @@ struct send_hardware_message_reply { struct reply_header __header; int wait; - int prev_x; - int prev_y; + int moved; int new_x; int new_y; - char __pad_28[4]; }; #define SEND_HWMSG_INJECTED 0x01
@@ -7038,6 +7036,6 @@ union generic_reply struct d3dkmt_object_open_name_reply d3dkmt_object_open_name_reply; };
-#define SERVER_PROTOCOL_VERSION 922 +#define SERVER_PROTOCOL_VERSION 923
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/protocol.def b/server/protocol.def index 8f16f3812c4..bc886c81e18 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2376,8 +2376,7 @@ enum message_type VARARG(report,bytes); /* HID report data */ @REPLY int wait; /* do we need to wait for a reply? */ - int prev_x; /* previous cursor position */ - int prev_y; + int moved; /* previous cursor position != new cursor position */ int new_x; /* new cursor position */ int new_y; @END diff --git a/server/queue.c b/server/queue.c index b77cd309a06..2168c3ca117 100644 --- a/server/queue.c +++ b/server/queue.c @@ -3239,6 +3239,7 @@ DECL_HANDLER(send_hardware_message) unsigned int origin = (req->flags & SEND_HWMSG_INJECTED ? IMO_INJECTED : IMO_HARDWARE); struct msg_queue *sender = req->flags & SEND_HWMSG_INJECTED ? get_current_queue() : NULL; desktop_shm_t *desktop_shm; + int prev_x, prev_y; int wait = 0;
if (!(desktop = get_hardware_input_desktop( req->win ))) return; @@ -3251,8 +3252,8 @@ DECL_HANDLER(send_hardware_message) } desktop_shm = desktop->shared;
- reply->prev_x = desktop_shm->cursor.x; - reply->prev_y = desktop_shm->cursor.y; + prev_x = desktop_shm->cursor.x; + prev_y = desktop_shm->cursor.y;
switch (req->input.type) { @@ -3272,6 +3273,7 @@ DECL_HANDLER(send_hardware_message) reply->wait = sender ? wait : 0; reply->new_x = desktop_shm->cursor.x; reply->new_y = desktop_shm->cursor.y; + reply->moved = prev_x != reply->new_x || prev_y != reply->new_y; release_object( desktop ); }
diff --git a/server/request_handlers.h b/server/request_handlers.h index c84be18f4fc..fe0b04897c4 100644 --- a/server/request_handlers.h +++ b/server/request_handlers.h @@ -1346,11 +1346,10 @@ C_ASSERT( offsetof(struct send_hardware_message_request, input) == 16 ); C_ASSERT( offsetof(struct send_hardware_message_request, flags) == 56 ); C_ASSERT( sizeof(struct send_hardware_message_request) == 64 ); C_ASSERT( offsetof(struct send_hardware_message_reply, wait) == 8 ); -C_ASSERT( offsetof(struct send_hardware_message_reply, prev_x) == 12 ); -C_ASSERT( offsetof(struct send_hardware_message_reply, prev_y) == 16 ); -C_ASSERT( offsetof(struct send_hardware_message_reply, new_x) == 20 ); -C_ASSERT( offsetof(struct send_hardware_message_reply, new_y) == 24 ); -C_ASSERT( sizeof(struct send_hardware_message_reply) == 32 ); +C_ASSERT( offsetof(struct send_hardware_message_reply, moved) == 12 ); +C_ASSERT( offsetof(struct send_hardware_message_reply, new_x) == 16 ); +C_ASSERT( offsetof(struct send_hardware_message_reply, new_y) == 20 ); +C_ASSERT( sizeof(struct send_hardware_message_reply) == 24 ); C_ASSERT( offsetof(struct get_message_request, flags) == 12 ); C_ASSERT( offsetof(struct get_message_request, get_win) == 16 ); C_ASSERT( offsetof(struct get_message_request, get_first) == 20 ); diff --git a/server/request_trace.h b/server/request_trace.h index 106c722ce6b..f7aad2c33e8 100644 --- a/server/request_trace.h +++ b/server/request_trace.h @@ -1443,8 +1443,7 @@ static void dump_send_hardware_message_request( const struct send_hardware_messa static void dump_send_hardware_message_reply( const struct send_hardware_message_reply *req ) { fprintf( stderr, " wait=%d", req->wait ); - fprintf( stderr, ", prev_x=%d", req->prev_x ); - fprintf( stderr, ", prev_y=%d", req->prev_y ); + fprintf( stderr, ", moved=%d", req->moved ); fprintf( stderr, ", new_x=%d", req->new_x ); fprintf( stderr, ", new_y=%d", req->new_y ); }