changeset 40385:b3dbd98f9b97

(w32_wnd_proc) <WM_KILLFOCUS>: Destroy the system caret. <WM_EMACS_DESTROY_CARET, WM_EMACS_TRACK_CARET>: Track cursor position using the system caret.
author Jason Rumney <jasonr@gnu.org>
date Sat, 27 Oct 2001 22:30:55 +0000
parents 25e6d4bb5f7f
children 7bdfd55ddbe9
files src/w32fns.c
diffstat 1 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32fns.c	Sat Oct 27 22:21:24 2001 +0000
+++ b/src/w32fns.c	Sat Oct 27 22:30:55 2001 +0000
@@ -307,6 +307,12 @@
 extern Lisp_Object Vw32_num_mouse_buttons;
 extern Lisp_Object Vw32_recognize_altgr;
 
+extern HWND w32_system_caret_hwnd;
+extern int w32_system_caret_width;
+extern int w32_system_caret_height;
+extern int w32_system_caret_x;
+extern int w32_system_caret_y;
+
 
 /* Error if we are not connected to MS-Windows.  */
 void
@@ -4785,6 +4791,12 @@
       unregister_hot_keys (hwnd);
       button_state = 0;
       ReleaseCapture ();
+      /* Relinquish the system caret.  */
+      if (w32_system_caret_hwnd)
+	{
+	  DestroyCaret ();
+	  w32_system_caret_hwnd = NULL;
+	}
     case WM_MOVE:
     case WM_SIZE:
     case WM_COMMAND:
@@ -4926,6 +4938,20 @@
       DragAcceptFiles ((HWND) wParam, FALSE);
       return DestroyWindow ((HWND) wParam);
 
+    case WM_EMACS_DESTROY_CARET:
+      w32_system_caret_hwnd = NULL;
+      return DestroyCaret ();
+
+    case WM_EMACS_TRACK_CARET:
+      /* If there is currently no system caret, create one.  */
+      if (w32_system_caret_hwnd == NULL)
+	{
+	  w32_system_caret_hwnd = hwnd;
+	  CreateCaret (hwnd, NULL, w32_system_caret_width,
+		       w32_system_caret_height);
+	}
+      return SetCaretPos (w32_system_caret_x, w32_system_caret_y);
+
     case WM_EMACS_TRACKPOPUPMENU:
       {
 	UINT flags;