server: Return the cursor information for a thread input, and use it for GetCursorInfo.
diff --git a/server/protocol.def b/server/protocol.def
index 5015e97..e4e8ec3 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2604,6 +2604,8 @@
     user_handle_t  menu_owner;    /* handle to the menu owner */
     user_handle_t  move_size;     /* handle to the moving/resizing window */
     user_handle_t  caret;         /* handle to the caret window */
+    user_handle_t  cursor;        /* handle to the cursor */
+    int            show_count;    /* cursor show count */
     rectangle_t    rect;          /* caret rectangle */
 @END
 
diff --git a/server/queue.c b/server/queue.c
index 4a06a73..d2090cd 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2055,18 +2055,11 @@
         reply->menu_owner = input->menu_owner;
         reply->move_size  = input->move_size;
         reply->caret      = input->caret;
+        reply->cursor     = input->cursor;
+        reply->show_count = input->cursor_count;
         reply->rect       = input->caret_rect;
     }
-    else
-    {
-        reply->focus      = 0;
-        reply->capture    = 0;
-        reply->active     = 0;
-        reply->menu_owner = 0;
-        reply->move_size  = 0;
-        reply->caret      = 0;
-        reply->rect.left = reply->rect.top = reply->rect.right = reply->rect.bottom = 0;
-    }
+
     /* foreground window is active window of foreground thread */
     reply->foreground = foreground_input ? foreground_input->active : 0;
     if (thread) release_object( thread );
diff --git a/server/request.h b/server/request.h
index 604d115..ef6adea 100644
--- a/server/request.h
+++ b/server/request.h
@@ -1712,8 +1712,10 @@
 C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, menu_owner) == 24 );
 C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, move_size) == 28 );
 C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, caret) == 32 );
-C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, rect) == 36 );
-C_ASSERT( sizeof(struct get_thread_input_reply) == 56 );
+C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, cursor) == 36 );
+C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, show_count) == 40 );
+C_ASSERT( FIELD_OFFSET(struct get_thread_input_reply, rect) == 44 );
+C_ASSERT( sizeof(struct get_thread_input_reply) == 64 );
 C_ASSERT( sizeof(struct get_last_input_time_request) == 16 );
 C_ASSERT( FIELD_OFFSET(struct get_last_input_time_reply, time) == 8 );
 C_ASSERT( sizeof(struct get_last_input_time_reply) == 16 );
diff --git a/server/trace.c b/server/trace.c
index c97bd70..ec87dab 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -3076,6 +3076,8 @@
     fprintf( stderr, ", menu_owner=%08x", req->menu_owner );
     fprintf( stderr, ", move_size=%08x", req->move_size );
     fprintf( stderr, ", caret=%08x", req->caret );
+    fprintf( stderr, ", cursor=%08x", req->cursor );
+    fprintf( stderr, ", show_count=%d", req->show_count );
     dump_rectangle( ", rect=", &req->rect );
 }