From: Rémi Bernon <rbernon(a)codeweavers.com> Based on a patch by Huw Davies <huw(a)codeweavers.com>. --- dlls/win32u/input.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index ef8d564c264..eb2b7b92bdb 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -749,22 +749,27 @@ BOOL WINAPI NtUserSetCursorPos( INT x, INT y ) */ BOOL get_cursor_pos( POINT *pt ) { - BOOL ret; - DWORD last_change; + BOOL invalid = FALSE, ret = FALSE; + struct session_object *object; + DWORD last_change = 0; UINT dpi; if (!pt) return FALSE; - SERVER_START_REQ( set_cursor ) + while ((object = get_shared_desktop( invalid ))) { - if ((ret = !wine_server_call( req ))) + SHARED_READ_BEGIN( &object->shared->desktop, desktop_shm_t ) { - pt->x = reply->new_x; - pt->y = reply->new_y; - last_change = reply->last_change; + if ((invalid = object->id != shared->obj.id)) break; + pt->x = shared->cursor.x; + pt->y = shared->cursor.y; + last_change = shared->cursor.last_change; + ret = TRUE; } + SHARED_READ_END; + session_object_release( object ); + if (!invalid) break; } - SERVER_END_REQ; /* query new position from graphics driver if we haven't updated recently */ if (ret && NtGetTickCount() - last_change > 100) ret = user_driver->pGetCursorPos( pt ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3103