Alexandre Julliard (@julliard) commented about server/queue.c:
+static int update_desktop_cursor_window( struct desktop *desktop, user_handle_t win, int x, int y ) { int updated = win != desktop->cursor.win; user_handle_t handle = desktop->cursor.handle; desktop->cursor.win = win; if (updated) {
struct thread *thread;
if ((thread = window_thread_from_point( win, x, y )))
{
struct thread_input *input = thread->queue->input;
if (input) handle = input->cursor_count < 0 ? 0 : input->cursor;
release_object( thread );
}
It shouldn't be necessary to find the exact child window, they all share the same thread input.