summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2010-08-28 12:32:44 +0300
committerEli Zaretskii <eliz@gnu.org>2010-08-28 12:32:44 +0300
commit544bbc31d93719ca7419f6da97809ad5eef1c378 (patch)
treef5ffedff94868d2c11c70b24da0382487f54d184 /src
parentefb6b75c91427015e4cf7c0fc0492e56a41b2c61 (diff)
downloademacs-544bbc31d93719ca7419f6da97809ad5eef1c378.tar.gz
Fix L2R code using bug #1220 as a test case.
xdisp.c (mouse_face_from_buffer_pos): before_string and after_string are also relevant when they come from an overlay.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c21
2 files changed, 17 insertions, 9 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 242018c4061..9b7c11d3bde 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2010-08-28 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (mouse_face_from_buffer_pos): Fix code using bug#1220 as
+ test case.
+
2010-08-21 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (mouse_face_from_buffer_pos): Support mouse highlight in
diff --git a/src/xdisp.c b/src/xdisp.c
index 7fcbab718b1..c6d441fa6c1 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -23897,7 +23897,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
between START_CHARPOS and END_CHARPOS, and highlight all the
glyphs between those two. This may cover more than just the
text between START_CHARPOS and END_CHARPOS if the range of
- characters strides the the bidi level boundary, e.g. if the
+ characters strides the bidi level boundary, e.g. if the
beginning is in R2L text while the end is in L2R text or vice
versa. */
if (!row->reversed_p)
@@ -23929,18 +23929,21 @@ mouse_face_from_buffer_pos (Lisp_Object window,
{
/* BEFORE_STRING or AFTER_STRING are only relevant if
they are present at buffer positions between
- START_CHARPOS and END_CHARPOS. */
+ START_CHARPOS and END_CHARPOS, or if they come from
+ an overlay. */
if (EQ (glyph->object, before_string))
{
pos = string_buffer_position (w, before_string,
start_charpos);
- if (pos && pos >= start_charpos && pos < end_charpos)
+ /* If pos == 0, it means before_string came from an
+ overlay, not from a buffer position. */
+ if (!pos || pos >= start_charpos && pos < end_charpos)
break;
}
else if (EQ (glyph->object, after_string))
{
pos = string_buffer_position (w, after_string, end_charpos);
- if (pos && pos >= start_charpos && pos < end_charpos)
+ if (!pos || pos >= start_charpos && pos < end_charpos)
break;
}
x += glyph->pixel_width;
@@ -24001,19 +24004,19 @@ mouse_face_from_buffer_pos (Lisp_Object window,
&& end->charpos < end_charpos));
--end)
{
- /* BEFORE_STRING or AFTER_STRING are only relevant if
- they are present at buffer positions between
- START_CHARPOS and END_CHARPOS. */
+ /* BEFORE_STRING or AFTER_STRING are only relevant if they
+ are present at buffer positions between START_CHARPOS and
+ END_CHARPOS, or if they come from an overlay. */
if (EQ (end->object, before_string))
{
pos = string_buffer_position (w, before_string, start_charpos);
- if (pos && pos >= start_charpos && pos < end_charpos)
+ if (!pos || pos >= start_charpos && pos < end_charpos)
break;
}
else if (EQ (end->object, after_string))
{
pos = string_buffer_position (w, after_string, end_charpos);
- if (pos && pos >= start_charpos && pos < end_charpos)
+ if (!pos || pos >= start_charpos && pos < end_charpos)
break;
}
}