[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 1e5392a: Make sure buffer is live before retrieving underline pro
From: |
Martin Rudalics |
Subject: |
master 1e5392a: Make sure buffer is live before retrieving underline properties (Bug#38038) |
Date: |
Tue, 12 Nov 2019 10:45:01 -0500 (EST) |
branch: master
commit 1e5392a4ae710486f77afb5898c552b5b0e85061
Author: Martin Rudalics <address@hidden>
Commit: Martin Rudalics <address@hidden>
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).
---
src/nsterm.m | 29 ++++++++++++++++-------------
src/w32term.c | 17 +++++++++--------
src/window.h | 7 +++++++
src/xterm.c | 17 +++++++++--------
4 files changed, 41 insertions(+), 29 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index 9d5082b..e1d745e 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -3435,19 +3435,22 @@ ns_draw_text_decoration (struct glyph_string *s, struct
face *face,
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)
diff --git a/src/w32term.c b/src/w32term.c
index 9da0845..d0537c6 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -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));
diff --git a/src/window.h b/src/window.h
index 71946a5..5b9a314 100644
--- a/src/window.h
+++ b/src/window.h
@@ -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))))
diff --git a/src/xterm.c b/src/xterm.c
index 44fbd27..f700580 100644
--- a/src/xterm.c
+++ b/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));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 1e5392a: Make sure buffer is live before retrieving underline properties (Bug#38038),
Martin Rudalics <=