CreateCaret patch

Krzysztof Foltman kfoltman at portal.onet.pl
Wed Feb 16 07:03:32 CST 2005


This patch ensures that caret position is not reset to (0, 0) when 
CreateCaret is called second time with the same window. For further 
details, see my mail on wine-devel.

Krzysztof
-------------- next part --------------
? createcaret.diff
? dlls/mpr/version.res
? dlls/ole32/version.res
? dlls/oleaut32/version.res
? dlls/shdocvw/version.res
? dlls/shell32/version.res
Index: server/queue.c
===================================================================
RCS file: /home/wine/wine/server/queue.c,v
retrieving revision 1.47
diff -u -r1.47 queue.c
--- server/queue.c	3 Feb 2005 16:40:20 -0000	1.47
+++ server/queue.c	16 Feb 2005 12:31:35 -0000
@@ -1879,6 +1879,8 @@
 DECL_HANDLER(set_caret_window)
 {
     struct msg_queue *queue = get_current_queue();
+    int x = 0, y = 0;
+    user_handle_t handle;
 
     reply->previous = 0;
     if (queue && check_queue_input_window( queue, req->handle ))
@@ -1890,9 +1892,16 @@
         reply->old_hide  = input->caret_hide;
         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;
+        handle = get_user_full_handle(req->handle);
+        if (input->caret == handle) {
+            x = input->caret_rect.left;
+            y = input->caret_rect.top;
+        }
+        set_caret_window( input, handle );
+        input->caret_rect.left   = x;
+        input->caret_rect.top    = y;
+        input->caret_rect.right  = x + req->width;
+        input->caret_rect.bottom = y + req->height;
     }
 }
 


More information about the wine-patches mailing list