Ensure that caret position is not reset to (0, 0) when CreateCaret is
called second time with the same window.
diff --git a/server/queue.c b/server/queue.c
index e5a5979..b78ad3c 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -175,11 +175,14 @@
/* set the caret window in a given thread input */
static void set_caret_window( struct thread_input *input, user_handle_t win )
{
+ if (!win || win != input->caret)
+ {
+ input->caret_rect.left = 0;
+ input->caret_rect.top = 0;
+ input->caret_rect.right = 0;
+ input->caret_rect.bottom = 0;
+ }
input->caret = win;
- input->caret_rect.left = 0;
- input->caret_rect.top = 0;
- input->caret_rect.right = 0;
- input->caret_rect.bottom = 0;
input->caret_hide = 1;
input->caret_state = 0;
}
@@ -1891,8 +1894,8 @@
reply->old_state = input->caret_state;
set_caret_window( input, get_user_full_handle(req->handle) );
- input->caret_rect.right = req->width;
- input->caret_rect.bottom = req->height;
+ input->caret_rect.right = input->caret_rect.left + req->width;
+ input->caret_rect.bottom = input->caret_rect.top + req->height;
}
}