Commit 93f2ca61 authored by Jason Rumney's avatar Jason Rumney

(w32_visible_system_caret_hwnd): New static variable.

(w32_wnd_proc) <WM_KILL_FOCUS, WM_EMACS_DESTROY_CARET>: Set it.
<WM_EMACS_TRACK_CARET>: Arrange for system caret to be visible if
the user requests it.  Use system default width when creating.
<WM_EMACS_HIDE_CARET, WM_EMACS_SHOW_CARET>: Handle new messages.
parent 99558ce8
...@@ -315,10 +315,13 @@ extern Lisp_Object Vw32_num_mouse_buttons; ...@@ -315,10 +315,13 @@ extern Lisp_Object Vw32_num_mouse_buttons;
extern Lisp_Object Vw32_recognize_altgr; extern Lisp_Object Vw32_recognize_altgr;
extern HWND w32_system_caret_hwnd; extern HWND w32_system_caret_hwnd;
extern int w32_system_caret_width;
extern int w32_system_caret_height; extern int w32_system_caret_height;
extern int w32_system_caret_x; extern int w32_system_caret_x;
extern int w32_system_caret_y; extern int w32_system_caret_y;
extern int w32_use_visible_system_caret;
HWND w32_visible_system_caret_hwnd;
/* Error if we are not connected to MS-Windows. */ /* Error if we are not connected to MS-Windows. */
...@@ -4878,6 +4881,7 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) ...@@ -4878,6 +4881,7 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
{ {
DestroyCaret (); DestroyCaret ();
w32_system_caret_hwnd = NULL; w32_system_caret_hwnd = NULL;
w32_visible_system_caret_hwnd = NULL;
} }
case WM_MOVE: case WM_MOVE:
case WM_SIZE: case WM_SIZE:
...@@ -5023,19 +5027,46 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) ...@@ -5023,19 +5027,46 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
DragAcceptFiles ((HWND) wParam, FALSE); DragAcceptFiles ((HWND) wParam, FALSE);
return DestroyWindow ((HWND) wParam); return DestroyWindow ((HWND) wParam);
case WM_EMACS_HIDE_CARET:
return HideCaret (hwnd);
case WM_EMACS_SHOW_CARET:
return ShowCaret (hwnd);
case WM_EMACS_DESTROY_CARET: case WM_EMACS_DESTROY_CARET:
w32_system_caret_hwnd = NULL; w32_system_caret_hwnd = NULL;
w32_visible_system_caret_hwnd = NULL;
return DestroyCaret (); return DestroyCaret ();
case WM_EMACS_TRACK_CARET: case WM_EMACS_TRACK_CARET:
/* If there is currently no system caret, create one. */ /* If there is currently no system caret, create one. */
if (w32_system_caret_hwnd == NULL) if (w32_system_caret_hwnd == NULL)
{ {
/* Use the default caret width, and avoid changing it
unneccesarily, as it confuses screen reader software. */
w32_system_caret_hwnd = hwnd; w32_system_caret_hwnd = hwnd;
CreateCaret (hwnd, NULL, w32_system_caret_width, CreateCaret (hwnd, NULL, 0,
w32_system_caret_height); w32_system_caret_height);
} }
return SetCaretPos (w32_system_caret_x, w32_system_caret_y);
if (!SetCaretPos (w32_system_caret_x, w32_system_caret_y))
return 0;
/* Ensure visible caret gets turned on when requested. */
else if (w32_use_visible_system_caret
&& w32_visible_system_caret_hwnd != hwnd)
{
w32_visible_system_caret_hwnd = hwnd;
return ShowCaret (hwnd);
}
/* Ensure visible caret gets turned off when requested. */
else if (!w32_use_visible_system_caret
&& w32_visible_system_caret_hwnd)
{
w32_visible_system_caret_hwnd = NULL;
return HideCaret (hwnd);
}
else
return 1;
case WM_EMACS_TRACKPOPUPMENU: case WM_EMACS_TRACKPOPUPMENU:
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment