Mercurial > emacs
diff src/xterm.c @ 45563:242a164e3126
(x_display_and_set_cursor): Change the cursor in the same
way for blinked-off state and for a nonselected window.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 28 May 2002 20:27:59 +0000 |
parents | adebb58b0c5e |
children | 9484de301252 |
line wrap: on
line diff
--- a/src/xterm.c Tue May 28 20:26:34 2002 +0000 +++ b/src/xterm.c Tue May 28 20:27:59 2002 +0000 @@ -11649,6 +11649,7 @@ struct frame *f = XFRAME (w->frame); int new_cursor_type; int new_cursor_width; + int cursor_off_state = 0; struct glyph_matrix *current_glyphs; struct glyph_row *glyph_row; struct glyph *glyph; @@ -11688,51 +11689,60 @@ marked off, draw no cursor. In all other cases, we want a hollow box cursor. */ new_cursor_width = -1; + new_cursor_type = -2; + + /* Echo area */ if (cursor_in_echo_area && FRAME_HAS_MINIBUF_P (f) && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window)) { if (w == XWINDOW (echo_area_window)) new_cursor_type = FRAME_DESIRED_CURSOR (f); - else if (!NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows, - w->buffer))) + else if (NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows, + w->buffer))) + new_cursor_type = NO_CURSOR; + else + cursor_off_state = 1; + } + + /* Nonselected window or nonselected frame. */ + else if (f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame + || w != XWINDOW (f->selected_window)) + { + if ((MINI_WINDOW_P (w) && minibuf_level == 0) + || NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows, + w->buffer)) + || NILP (XBUFFER (w->buffer)->cursor_type)) + new_cursor_type = NO_CURSOR; + else + cursor_off_state = 1; + } + + /* If new_cursor_type isn't decided yet, decide it now. */ + if (new_cursor_type == -2) + { + struct buffer *b = XBUFFER (w->buffer); + + if (EQ (b->cursor_type, Qt)) + new_cursor_type = FRAME_DESIRED_CURSOR (f); + else + new_cursor_type = x_specified_cursor_type (b->cursor_type, + &new_cursor_width); + } + + /* Dim out or hollow out the cursor, + if it has blinked off or for nonselected windows. */ + if (w->cursor_off_p || cursor_off_state) + { + if (new_cursor_type == FILLED_BOX_CURSOR) new_cursor_type = HOLLOW_BOX_CURSOR; + else if (new_cursor_type == BAR_CURSOR && new_cursor_width > 1) + new_cursor_width = 1; else new_cursor_type = NO_CURSOR; } - else - { - if (f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame - || w != XWINDOW (f->selected_window)) - { - if ((MINI_WINDOW_P (w) && minibuf_level == 0) - || NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows, - w->buffer)) - || NILP (XBUFFER (w->buffer)->cursor_type)) - new_cursor_type = NO_CURSOR; - else - new_cursor_type = HOLLOW_BOX_CURSOR; - } - else - { - struct buffer *b = XBUFFER (w->buffer); - - if (EQ (b->cursor_type, Qt)) - new_cursor_type = FRAME_DESIRED_CURSOR (f); - else - new_cursor_type = x_specified_cursor_type (b->cursor_type, - &new_cursor_width); - if (w->cursor_off_p) - { - if (new_cursor_type == FILLED_BOX_CURSOR) - new_cursor_type = HOLLOW_BOX_CURSOR; - else if (new_cursor_type == BAR_CURSOR && new_cursor_width > 1) - new_cursor_width = 1; - else - new_cursor_type = NO_CURSOR; - } - } - } + + /* Now new_cursor_type is correct. */ /* If cursor is currently being shown and we don't want it to be or it is in the wrong place, or the cursor type is not what we want,