Make sure buffer is live before retrieving underline properties (Bug#38038)
* src/window.h (WINDOW_BUFFER_LOCAL_VALUE): New macro. * src/nsterm.m (ns_draw_text_decoration): * src/w32term.c (w32_draw_glyph_string): * src/xterm.c (x_draw_glyph_string): Make sure buffer is live before retrieving underline properties from it (Bug#38038).
This commit is contained in:
parent
6eaf62df20
commit
1e5392a4ae
4 changed files with 41 additions and 29 deletions
29
src/nsterm.m
29
src/nsterm.m
|
@ -3435,19 +3435,22 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
|||
unsigned long descent = s->y + s->height - s->ybase;
|
||||
unsigned long minimum_offset;
|
||||
BOOL underline_at_descent_line, use_underline_position_properties;
|
||||
Lisp_Object val = buffer_local_value (Qunderline_minimum_offset,
|
||||
s->w->contents);
|
||||
if (FIXNUMP (val))
|
||||
minimum_offset = XFIXNAT (val);
|
||||
else
|
||||
minimum_offset = 1;
|
||||
val = buffer_local_value (Qx_underline_at_descent_line,
|
||||
s->w->contents);
|
||||
underline_at_descent_line = !(NILP (val) || EQ (val, Qunbound));
|
||||
val = buffer_local_value (Qx_use_underline_position_properties,
|
||||
s->w->contents);
|
||||
use_underline_position_properties =
|
||||
!(NILP (val) || EQ (val, Qunbound));
|
||||
Lisp_Object val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qunderline_minimum_offset, s->w));
|
||||
|
||||
if (FIXNUMP (val))
|
||||
minimum_offset = XFIXNAT (val);
|
||||
else
|
||||
minimum_offset = 1;
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_underline_at_descent_line, s->w));
|
||||
underline_at_descent_line = !(NILP (val) || EQ (val, Qunbound));
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_use_underline_position_properties, s->w));
|
||||
use_underline_position_properties
|
||||
= !(NILP (val) || EQ (val, Qunbound));
|
||||
|
||||
/* Use underline thickness of font, defaulting to 1. */
|
||||
thickness = (font && font->underline_thickness > 0)
|
||||
|
|
|
@ -2512,20 +2512,21 @@ w32_draw_glyph_string (struct glyph_string *s)
|
|||
unsigned long minimum_offset;
|
||||
BOOL underline_at_descent_line;
|
||||
BOOL use_underline_position_properties;
|
||||
Lisp_Object val
|
||||
= buffer_local_value (Qunderline_minimum_offset,
|
||||
s->w->contents);
|
||||
Lisp_Object val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qunderline_minimum_offset, s->w));
|
||||
|
||||
if (FIXNUMP (val))
|
||||
minimum_offset = max (0, XFIXNUM (val));
|
||||
else
|
||||
minimum_offset = 1;
|
||||
val = buffer_local_value (Qx_underline_at_descent_line,
|
||||
s->w->contents);
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_underline_at_descent_line, s->w));
|
||||
underline_at_descent_line
|
||||
= !(NILP (val) || EQ (val, Qunbound));
|
||||
val
|
||||
= buffer_local_value (Qx_use_underline_position_properties,
|
||||
s->w->contents);
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_use_underline_position_properties, s->w));
|
||||
use_underline_position_properties
|
||||
= !(NILP (val) || EQ (val, Qunbound));
|
||||
|
||||
|
|
|
@ -608,6 +608,13 @@ wset_next_buffers (struct window *w, Lisp_Object val)
|
|||
? (W)->contents \
|
||||
: Qnil)
|
||||
|
||||
/* Local value of variable V in window W's buffer. Nil if W has no
|
||||
buffer. */
|
||||
#define WINDOW_BUFFER_LOCAL_VALUE(V, W) \
|
||||
(BUFFERP ((W)->contents) \
|
||||
? buffer_local_value(V, (W)->contents) \
|
||||
: Qnil)
|
||||
|
||||
/* Return the canonical column width of the frame of window W. */
|
||||
#define WINDOW_FRAME_COLUMN_WIDTH(W) \
|
||||
(FRAME_COLUMN_WIDTH (WINDOW_XFRAME ((W))))
|
||||
|
|
17
src/xterm.c
17
src/xterm.c
|
@ -3847,20 +3847,21 @@ x_draw_glyph_string (struct glyph_string *s)
|
|||
unsigned long minimum_offset;
|
||||
bool underline_at_descent_line;
|
||||
bool use_underline_position_properties;
|
||||
Lisp_Object val
|
||||
= buffer_local_value (Qunderline_minimum_offset,
|
||||
s->w->contents);
|
||||
Lisp_Object val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qunderline_minimum_offset, s->w));
|
||||
|
||||
if (FIXNUMP (val))
|
||||
minimum_offset = max (0, XFIXNUM (val));
|
||||
else
|
||||
minimum_offset = 1;
|
||||
val = buffer_local_value (Qx_underline_at_descent_line,
|
||||
s->w->contents);
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_underline_at_descent_line, s->w));
|
||||
underline_at_descent_line
|
||||
= !(NILP (val) || EQ (val, Qunbound));
|
||||
val
|
||||
= buffer_local_value (Qx_use_underline_position_properties,
|
||||
s->w->contents);
|
||||
|
||||
val = (WINDOW_BUFFER_LOCAL_VALUE
|
||||
(Qx_use_underline_position_properties, s->w));
|
||||
use_underline_position_properties
|
||||
= !(NILP (val) || EQ (val, Qunbound));
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue