Implemented GetLastInputInfo.
diff --git a/server/protocol.def b/server/protocol.def
index fe89218..97b51bf 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2008,6 +2008,14 @@
rectangle_t rect; /* caret rectangle */
@END
+
+/* Get the time of the last input event */
+@REQ(get_last_input_time)
+@REPLY
+ unsigned int time;
+@END
+
+
/* Retrieve queue keyboard state for a given thread */
@REQ(get_key_state)
thread_id_t tid; /* id of thread */
diff --git a/server/queue.c b/server/queue.c
index 83f908e..a0617a1 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -167,6 +167,7 @@
/* pointer to input structure of foreground thread */
static struct thread_input *foreground_input;
+static unsigned int last_input_time;
/* set the caret window in a given thread input */
@@ -1154,6 +1155,8 @@
struct thread_input *input;
unsigned int msg_code;
+ last_input_time = get_tick_count();
+
win = find_hardware_message_window( queue ? queue->input : foreground_input, msg, &msg_code );
if (!win || !(thread = get_window_thread(win)))
{
@@ -2006,3 +2009,10 @@
else input->caret_state = !!req->state;
}
}
+
+
+/* get the time of the last input event */
+DECL_HANDLER(get_last_input_time)
+{
+ reply->time = last_input_time;
+}
diff --git a/server/request.h b/server/request.h
index 49228dc..8a6ac16 100644
--- a/server/request.h
+++ b/server/request.h
@@ -266,6 +266,7 @@
DECL_HANDLER(get_window_properties);
DECL_HANDLER(attach_thread_input);
DECL_HANDLER(get_thread_input);
+DECL_HANDLER(get_last_input_time);
DECL_HANDLER(get_key_state);
DECL_HANDLER(set_key_state);
DECL_HANDLER(set_foreground_window);
@@ -461,6 +462,7 @@
(req_handler)req_get_window_properties,
(req_handler)req_attach_thread_input,
(req_handler)req_get_thread_input,
+ (req_handler)req_get_last_input_time,
(req_handler)req_get_key_state,
(req_handler)req_set_key_state,
(req_handler)req_set_foreground_window,
diff --git a/server/trace.c b/server/trace.c
index 2de4ddf..f79e8e3 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2397,6 +2397,15 @@
dump_rectangle( &req->rect );
}
+static void dump_get_last_input_time_request( const struct get_last_input_time_request *req )
+{
+}
+
+static void dump_get_last_input_time_reply( const struct get_last_input_time_reply *req )
+{
+ fprintf( stderr, " time=%08x", req->time );
+}
+
static void dump_get_key_state_request( const struct get_key_state_request *req )
{
fprintf( stderr, " tid=%04x,", req->tid );
@@ -2926,6 +2935,7 @@
(dump_func)dump_get_window_properties_request,
(dump_func)dump_attach_thread_input_request,
(dump_func)dump_get_thread_input_request,
+ (dump_func)dump_get_last_input_time_request,
(dump_func)dump_get_key_state_request,
(dump_func)dump_set_key_state_request,
(dump_func)dump_set_foreground_window_request,
@@ -3118,6 +3128,7 @@
(dump_func)dump_get_window_properties_reply,
(dump_func)0,
(dump_func)dump_get_thread_input_reply,
+ (dump_func)dump_get_last_input_time_reply,
(dump_func)dump_get_key_state_reply,
(dump_func)0,
(dump_func)dump_set_foreground_window_reply,
@@ -3310,6 +3321,7 @@
"get_window_properties",
"attach_thread_input",
"get_thread_input",
+ "get_last_input_time",
"get_key_state",
"set_key_state",
"set_foreground_window",