changeset 47097:398a8f34fb26

(x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist. (Vblink_cursor_alist): New variable. (syms_of_w32fns): Initialize and defvar it. (x_specified_cursor_type): Recognize Qbox for filled box. Exceptions are hollow boxes. (Qbox, Qhollow): New variables. (syms_of_w32fns): Initialize and staticpro them.
author Richard M. Stallman <rms@gnu.org>
date Thu, 29 Aug 2002 14:37:33 +0000
parents f0b41fba2995
children 7746b52cf1c9
files src/w32fns.c
diffstat 1 files changed, 43 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32fns.c	Thu Aug 29 13:12:05 2002 +0000
+++ b/src/w32fns.c	Thu Aug 29 14:37:33 2002 +0000
@@ -202,9 +202,12 @@
 #define VIETNAMESE_CHARSET 163
 #endif
 
+/* How to blink the cursor off.  */
+Lisp_Object Vblink_cursor_alist;
+
 Lisp_Object Qauto_raise;
 Lisp_Object Qauto_lower;
-Lisp_Object Qbar, Qhbar;
+Lisp_Object Qbar, Qhbar, Qbox, Qhollow;
 Lisp_Object Qborder_color;
 Lisp_Object Qborder_width;
 Lisp_Object Qbox;
@@ -2386,11 +2389,13 @@
     }
   else if (NILP (arg))
     type = NO_CURSOR;
-  else
-    /* Treat anything unknown as "box cursor".
+  else if (EQ (arg, Qbox))
+    type = FILLED_BOX_CURSOR;
+  else
+    /* Treat anything unknown as "hollow box cursor".
        It was bad to signal an error; people have trouble fixing
        .Xdefaults with Emacs, when it has something bad in it.  */
-    type = FILLED_BOX_CURSOR;
+    type = HOLLOW_BOX_CURSOR;
 
   return type;
 }
@@ -2401,13 +2406,34 @@
      Lisp_Object arg, oldval;
 {
   int width;
-  
+  Lisp_Object tem;
+
   FRAME_DESIRED_CURSOR (f) = x_specified_cursor_type (arg, &width);
   f->output_data.w32->cursor_width = width;
 
   /* Make sure the cursor gets redrawn.  This is overkill, but how
      often do people change cursor types?  */
   update_mode_lines++;
+
+  /* By default, set up the blink-off state depending on the on-state.  */
+
+  if (FRAME_DESIRED_CURSOR (f) == FILLED_BOX_CURSOR)
+    FRAME_BLINK_OFF_CURSOR (f) = HOLLOW_BOX_CURSOR;
+  else if (FRAME_DESIRED_CURSOR (f) == BAR_CURSOR && FRAME_CURSOR_WIDTH (f) > 1)
+    {
+      FRAME_BLINK_OFF_CURSOR (f) = BAR_CURSOR;
+      FRAME_BLINK_OFF_CURSOR_WIDTH (f) = 1;
+    }
+  else
+    FRAME_BLINK_OFF_CURSOR (f) = NO_CURSOR;
+
+  tem = Fassoc (arg, Vblink_cursor_alist);
+  if (!NILP (tem))
+    {
+      FRAME_BLINK_OFF_CURSOR (f)
+	= x_specified_cursor_type (XCDR (tem), &width);
+      f->output_data.w32->blink_off_cursor_width = width;
+    }
 }
 
 void
@@ -14870,6 +14896,10 @@
   staticpro (&Qbar);
   Qhbar = intern ("hbar");
   staticpro (&Qhbar);
+  Qbox = intern ("box");
+  staticpro (&Qbox);
+  Qhollow = intern ("hollow");
+  staticpro (&Qhollow);
   Qborder_color = intern ("border-color");
   staticpro (&Qborder_color);
   Qborder_width = intern ("border-width");
@@ -15110,6 +15140,14 @@
 
   init_x_parm_symbols ();
 
+  DEFVAR_LISP ("blink-cursor-alist", &Vblink_cursor_alist,
+    doc: /* Alist specifying how to blink the cursor off.
+Each element has the form (ON-STATE . OFF-STATE).  Whenever the
+`cursor-type' frame-parameter or variable equals ON-STATE,
+comparing using `equal', Emacs uses OFF-STATE to specify
+how to blink it off.  */);
+  Vblink_cursor_alist = Qnil;
+
   DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path,
 	       doc: /* List of directories to search for bitmap files for w32.  */);
   Vx_bitmap_file_path = decode_env_path ((char *) 0, "PATH");