1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(x_draw_phys_cursor_glyph): Undo last change. Compute

phys_cursor_width from the x position returned by x_draw_glyhs,
which is cheaper.
(x_display_and_set_cursor): Compute the buffer-local value
of `cursor-in-non-selected-windows' only when needed.
This commit is contained in:
Gerd Moellmann 2002-04-26 17:56:03 +00:00
parent 6cc6a2e95b
commit 56a0382c7d
2 changed files with 23 additions and 23 deletions

View File

@ -1,3 +1,11 @@
2002-04-26 Gerd Moellmann <gerd@gnu.org>
* xterm.c (x_draw_phys_cursor_glyph): Undo last change. Compute
phys_cursor_width from the x position returned by x_draw_glyhs,
which is cheaper.
(x_display_and_set_cursor): Compute the buffer-local value
of `cursor-in-non-selected-windows' only when needed.
2002-04-25 Gerd Moellmann <gerd@gnu.org>
* xterm.c (x_draw_phys_cursor_glyph): Take into account that a box

View File

@ -11468,24 +11468,15 @@ x_draw_phys_cursor_glyph (w, row, hl)
if (w->phys_cursor.hpos < row->used[TEXT_AREA])
{
int on_p = w->phys_cursor_on_p;
int x1;
x_draw_glyphs (w, w->phys_cursor.x, row, TEXT_AREA,
w->phys_cursor.hpos, w->phys_cursor.hpos + 1,
hl, 0);
x1 = x_draw_glyphs (w, w->phys_cursor.x, row, TEXT_AREA,
w->phys_cursor.hpos, w->phys_cursor.hpos + 1,
hl, 0);
w->phys_cursor_on_p = on_p;
if (hl == DRAW_CURSOR)
{
struct glyph *cursor_glyph = get_phys_cursor_glyph (w);
if (cursor_glyph)
{
if (x_stretch_cursor_p)
w->phys_cursor_width = cursor_glyph->pixel_width;
else
w->phys_cursor_width = min (CANON_X_UNIT (XFRAME (w->frame)),
cursor_glyph->pixel_width);
}
}
w->phys_cursor_width = x1 - w->phys_cursor.x;
/* When we erase the cursor, and ROW is overlapped by other
rows, make sure that these overlapping parts of other rows
@ -11644,7 +11635,6 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
struct glyph_matrix *current_glyphs;
struct glyph_row *glyph_row;
struct glyph *glyph;
int cursor_non_selected;
/* This is pointless on invisible frames, and dangerous on garbaged
windows and frames; in the latter case, the frame or window may
@ -11680,9 +11670,6 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
the cursor type given by the frame parameter. If explicitly
marked off, draw no cursor. In all other cases, we want a hollow
box cursor. */
cursor_non_selected
= !NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
w->buffer));
new_cursor_width = -1;
if (cursor_in_echo_area
&& FRAME_HAS_MINIBUF_P (f)
@ -11690,7 +11677,8 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
{
if (w == XWINDOW (echo_area_window))
new_cursor_type = FRAME_DESIRED_CURSOR (f);
else if (cursor_non_selected)
else if (!NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
w->buffer)))
new_cursor_type = HOLLOW_BOX_CURSOR;
else
new_cursor_type = NO_CURSOR;
@ -11701,7 +11689,8 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
|| w != XWINDOW (f->selected_window))
{
if ((MINI_WINDOW_P (w) && minibuf_level == 0)
|| !cursor_non_selected
|| NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
w->buffer))
|| NILP (XBUFFER (w->buffer)->cursor_type))
new_cursor_type = NO_CURSOR;
else
@ -11740,9 +11729,12 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
&& new_cursor_width != w->phys_cursor_width)))
x_erase_phys_cursor (w);
/* If the cursor is now invisible and we want it to be visible,
display it. */
if (on && !w->phys_cursor_on_p)
/* Don't check phys_cursor_on_p here because that flag is only set
to zero in some cases where we know that the cursor has been
completely erased, to avoid the extra work of erasing the cursor
twice. In other words, phys_cursor_on_p can be 1 and the cursor
still not be visible, or it has only been partly erased. */
if (on)
{
w->phys_cursor_ascent = glyph_row->ascent;
w->phys_cursor_height = glyph_row->height;