]> git.eshelyaron.com Git - emacs.git/commitdiff
(w32_wnd_proc) <WM_KILLFOCUS>: Destroy the system caret.
authorJason Rumney <jasonr@gnu.org>
Sat, 27 Oct 2001 22:30:55 +0000 (22:30 +0000)
committerJason Rumney <jasonr@gnu.org>
Sat, 27 Oct 2001 22:30:55 +0000 (22:30 +0000)
<WM_EMACS_DESTROY_CARET, WM_EMACS_TRACK_CARET>: Track cursor
position using the system caret.

src/w32fns.c

index a4ad1e49c2057ca85ae6bd433442763855839019..55af56303ebcda4f6feea807ac44f1e882528b37 100644 (file)
@@ -307,6 +307,12 @@ int image_cache_refcount, dpyinfo_refcount;
 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;
+
 \f
 /* Error if we are not connected to MS-Windows.  */
 void
@@ -4785,6 +4791,12 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
       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 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
       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;