diff options
author | Eli Zaretskii <eliz@gnu.org> | 2010-08-28 12:32:44 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2010-08-28 12:32:44 +0300 |
commit | 544bbc31d93719ca7419f6da97809ad5eef1c378 (patch) | |
tree | f5ffedff94868d2c11c70b24da0382487f54d184 /src | |
parent | efb6b75c91427015e4cf7c0fc0492e56a41b2c61 (diff) | |
download | emacs-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/ChangeLog | 5 | ||||
-rw-r--r-- | src/xdisp.c | 21 |
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; } } |